Based on help files and searching the archives and help from the listserv I have managed to build my monte carlo program. However I cannot get the proper syntax for running the loop and storing the output of each loop (which is a vector) into a matrix. I took out some of the crazy code I was writing, but here is what I have: -------------------- rm(list = ls(all = TRUE)) # removes everything a <-c("A","C","B","A","B","C") b <-c(10,20,30,40,50,60) c <-data.frame(a,b) N=10 #Number of Loops output.matrix <- matrix(0.0,3,N) #I need to START LOOP HERE a <- sample(a, replace=TRUE) c <-data.frame(b,a) output.vector <- by(c, a, function(x) sum(x$b)) output.vector <- as.vector(output) output.vector <- data.frame(output) #END LOOP here -------------------------- What I would like to have at the end is the "output.matrix" contain as a column the "output.vector" from each iteration. The actual data frame I will be running has 60,000 observations and I am going to run 20000 iterations so speed is important too. Thanks so much EG [[alternative HTML version deleted]]
I'm not sure I've completely understood this, but would this do what you want: for (i in 1:N){ aa <- sample(a, replace=TRUE) c <-data.frame(b,aa) output <- by(c, aa, function(x) sum(x$b)) output.matrix[,i] <- as.vector(output) } On 17/06/07, Economics Guy <economics.guy at gmail.com> wrote:> Based on help files and searching the archives and help from the listserv I > have managed to build my monte carlo program. > > However I cannot get the proper syntax for running the loop and storing the > output of each loop (which is a vector) into a matrix. > > I took out some of the crazy code I was writing, but here is what I have: > > -------------------- > > rm(list = ls(all = TRUE)) > # removes everything > > a <-c("A","C","B","A","B","C") > > b <-c(10,20,30,40,50,60) > > c <-data.frame(a,b) > > N=10 #Number of Loops > > output.matrix <- matrix(0.0,3,N) > > #I need to START LOOP HERE > > a <- sample(a, replace=TRUE) > > c <-data.frame(b,a) > > output.vector <- by(c, a, function(x) sum(x$b)) > > output.vector <- as.vector(output) > > output.vector <- data.frame(output) > > #END LOOP here > > > -------------------------- > > What I would like to have at the end is the "output.matrix" contain as a > column the "output.vector" from each iteration. The actual data frame I > will be running has 60,000 observations and I am going to run 20000 > iterations so speed is important too. > > Thanks so much > > EG > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at stat.math.ethz.ch 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. >-- ================================David Barron Said Business School University of Oxford Park End Street Oxford OX1 1HP
I think this does it for you:> a <-c("A","C","B","A","B","C") > > b <-c(10,20,30,40,50,60) > > C <-data.frame(a,b) # don't use 'c' as it is a primitive function - canbeconfusing> > N=10 #Number of Loops > > > > output.matix <- replicate(N, function(x){+ .samp <- C[sample(nrow(C), replace=TRUE), ] + tapply(.samp$b, .samp$a, sum) + })> # transpose if you want samples in columns > output.matrix <- t(output.matrix) > output.matrix[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] A 10 130 100 40 50 40 30 50 50 50 B 130 60 50 110 100 160 110 130 60 150 C 40 NA 60 80 120 60 NA 60 80 20>On 6/17/07, Economics Guy <economics.guy@gmail.com> wrote:> > Based on help files and searching the archives and help from the listserv > I > have managed to build my monte carlo program. > > However I cannot get the proper syntax for running the loop and storing > the > output of each loop (which is a vector) into a matrix. > > I took out some of the crazy code I was writing, but here is what I have: > > -------------------- > > rm(list = ls(all = TRUE)) > # removes everything > > a <-c("A","C","B","A","B","C") > > b <-c(10,20,30,40,50,60) > > c <-data.frame(a,b) > > N=10 #Number of Loops > > output.matrix <- matrix(0.0,3,N) > > #I need to START LOOP HERE > > a <- sample(a, replace=TRUE) > > c <-data.frame(b,a) > > output.vector <- by(c, a, function(x) sum(x$b)) > > output.vector <- as.vector(output) > > output.vector <- data.frame(output) > > #END LOOP here > > > -------------------------- > > What I would like to have at the end is the "output.matrix" contain as a > column the "output.vector" from each iteration. The actual data frame I > will be running has 60,000 observations and I am going to run 20000 > iterations so speed is important too. > > Thanks so much > > EG > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@stat.math.ethz.ch 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve? [[alternative HTML version deleted]]