Eekhout, I. wrote on 09/19/2011 10:16:17 AM: > > Hi all, > > I would like to replace the for loop in the code below with a function > to improve the speed and to make the script more efficient. > The loop creates a vector of integers (x) with the probability of f for > each integer. > The length of f is variable, but sums to 1. > I tried to use a function with optional arguments which did not work. > > Here is the code: > > f <- data.matrix(c(0.5,0.15,0.35)) > u <- runif(50) > x <- data.matrix(rep(1, n)) > fc <- 0 > for(i in 1:length(f)) { > fc <- fc + f[i] > cf <- ifelse(u>fc,1,0) > x <- x + cf > } > x > > Can anyone help me with this translation? > Thanks in advance, > > Iris
There was no "n" in the sample code you shared. I assumed n=50. n <- 50 f <- data.matrix(c(0.5, 0.15, 0.35)) u <- runif(n) res <- outer(u, cumsum(f), ">") x <- rowSums(res) + 1 x Jean [[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.