A couple of remarks on vQ's naive benchmark:
f.rep = function(n, m) replicate(n, rnorm(m))
I suppose you meant f.rep = function(n, m) replicate(n, mean(rnorm(m))) which doesn't make a substantial speed difference, though.
f.pat = function(n, m) colMeans(array(rnorm(n*m), c(n, m))) system.time(f.pat(1000, 1000)) system.time(f.rep(1000, 1000)) makes me believe that there is no significant difference in efficiency between the 'professionally-looking' replicate-based solution and the 'as fast as possible' pat's solution.
True, I get the same timing results on my machine. But then you should also point out that the original for-loop:
f.for = function(n, m) { res <- numeric(n); for (i in 1:n) res[i] <- mean(rnorm(m)); res }
is exactly as fast as replicate(). So apart from "looking more professional", there isn't any difference between an explicit loop and replicate().
Perhaps loops in R aren't always as slow (compared to matrix operations) as one seemed to think. I ran into a similar issue with a simple benchmark the other day, where a plain loop in Lua was faster than vectorised code in R ...
I have to say, though, that like Patrick I assumed the goal was to obtain a large number of replicates for relatively small sets of random numbers, in which case the matrix solution is indeed faster (though not as much as I would have thought):
> system.time(f.for(100000, 100)) user system elapsed 4.212 0.025 4.273 > system.time(f.rep(100000, 100)) user system elapsed 4.109 0.028 4.172 > system.time(f.pat(100000, 100)) user system elapsed 1.580 0.134 1.739 Best regards, Stefan Evert [ stefan.ev...@uos.de | http://purl.org/stefan.evert ] PS: Don't feed trolls who say that Lua is better than R. ;-) ______________________________________________ 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.