You don't need to return() from the for loop -- just put your outputs in a variable:
set.seed(1) # For reproducibility x <- numeric(20) for(i in 1:20) x[i] <- bob(0.5, sqrt) or (more elegant but basically the same thing) set.seed(1) x1 <- replicate(20, bob(0.5, sqrt)) # Same calculation done 20x and results collected but what's best is to make your code vectorized (which is pretty straightforward here): bob <- function(var1, func) { func <- match.fun(func) # Make sure it's a function return(ifelse(runif(length(var1)) < var1, var1, func(var1))) } set.seed(1) x2 <- bob(rep(0.5, 20), sqrt) identical(x, x1) # TRUE identical(x, x2) # TRUE Incidentally, you don't need the return() for the simplified version of bob() because the function only has one possible end-point and, by default, returns the result of the last calculation. Best, Michael On Tue, Apr 10, 2012 at 11:56 PM, C W <tmrs...@gmail.com> wrote: > Thanks. > > So, I want the function to return results from the if statement. > > bob <- function(var1, func) > { > #func: a simple function > > num1 <- var1 > num2 <- func(var1) > > if(ruinf(1)<num1) > { > return(num1) > }else{ > return(num2) > } > } > > And then, run 20 iterations of the function. > > On Tue, Apr 10, 2012 at 11:26 PM, R. Michael Weylandt > <michael.weyla...@gmail.com> wrote: >> >> The error message should make it pretty clear -- you aren't inside a >> function so you can't return() a value which is, by definition, what >> functions (and only functions) do.** Not sure there's a great >> reference for this though beyond the error message.... >> >> Incidentally, what are you trying to do here? The code doesn't really >> make much sense to me -- do you just want samples = 5*(1:10) ? >> >> Michael >> >> ** I think there's a subtlety glossed over herein: functional >> programming purists can wince silently if they so choose. >> >> On Tue, Apr 10, 2012 at 11:17 PM, C W <tmrs...@gmail.com> wrote: >> > Dear all, I get an error using the return function. The following is a >> > simpler version. >> > >> > for (j in 1:10) >> > { >> > samples = 5*j >> > return(samples) >> > } >> > >> > Error: no function to return from, jumping to top level >> > >> > >> > Similar warning happens with if statement. >> > >> > Why do I get an error? print() works fine. I don't see anywhere in the >> > documentation says that return() is not allowed inside for loop. >> > >> > I know the list is for advanced computation topics, and I don't want to >> > bother the list too much. Where should I look for things like this in >> > the >> > future? >> > >> > ?return() nor the R documentation does not mention any of this. >> > >> > Bob >> > >> > [[alternative HTML version deleted]] >> > >> > ______________________________________________ >> > R-help@r-project.org mailing list >> > https://stat.ethz.ch/mailman/listinfo/r-help >> > PLEASE do read the posting guide >> > http://www.R-project.org/posting-guide.html >> > and provide commented, minimal, self-contained, reproducible code. > > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.