I know that this branch is really old, but if someone came across it and is looking for an even faster method, I think the following works:
library(data.table) library(microbenchmark) nsims <- 10000 n <- 100 # Answer from @Eduardo_Leoni: preallocate<-function(nsims, n) { res <- rep(NA, nsims) for (i in 1:nsims) { res[i] <- mean(rnorm(n)) } return(res) } # Answer using data.table: datatable<-function(nsims,n) { dt <- data.table(i=1:nsims)[,list(res=mean(rnorm(1:n))),by=i] return(dt) } # Timing benchmark: microbenchmark(preallocate(nsims,n), datatable(nsims,n), times=100) #Unit: milliseconds # expr min lq median uq max neval # preallocate(nsims, n) 428.4022 432.3249 434.2910 436.4806 489.2061 100 # datatable(nsims, n) 238.9006 242.3517 244.1229 246.5998 303.6133 100
source share