Hi, You may also try: fun1 <- function(n, repl, val1, val2) { mat1 <- suppressWarnings(replicate(repl, log(runif(n, val1, val2)))) mat1[!is.na(mat1)][seq(n)] }
#Jim's function fun2 <- function(init, final, val1, val2) { i <- init while (i < final) { u <- runif(1, val1, val2) if (u >= 0) { x[i] <- log(u) i <- i + 1 } } x } set.seed(49) x1 <- fun1(10,3,-1,2) set.seed(49) x2 <- fun2(1,11,-1,2) identical(x1,x2) #[1] TRUE ###Speed comparison set.seed(58) system.time(x1 <- fun1(1e5,100, -1,2)) # user system elapsed # 1.392 0.105 1.500 set.seed(58) system.time(x2 <- fun2(1,1e5+1,-1,2)) # user system elapsed # 31.930 0.988 32.973 identical(x1,x2) #[1] TRUE A.K. On Friday, May 23, 2014 4:19 AM, Jim Lemon <j...@bitwrit.com.au> wrote: On Thu, 22 May 2014 09:11:43 PM Ricardo Rocha wrote: > Hi everybody. > > Consider the following exampling code: > > x=numeric() > for(i in 1:10){ > u=runif(1,-1,2) > x[i]=log(u) > } > This code, in each interation, generates a random value in the (-1,2) > interval and then calculates the log of the value. When the generated value > is less than 0 the log produces a NaN, which gives a warning. > > What I want is to make it start over when a warning is produced, in order to > repeat it until a positive value is generated and therefore the log is > calculated. Logically, would be like: "if there's a warning here, go back > at the beginning and start over", without changing the iteration. > > Could someone help me with some directions? > Hi Ricardo, Perhaps what you want is something like this: i<-1 while(I < 11) { u<-runif(1,-1,2) if(u >= 0) { x[i]<-log(u) i<-i+1 } } Jim ______________________________________________ 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.