On Fri, Oct 15, 2010 at 12:23 AM, Joshua Wiley <jwiley.ps...@gmail.com> wrote: > > Hi, > > You might look at Reduce(). It seems faster. I converted the matrix > to a list in an incredibly sloppy way (which you should not emulate) > because I cannot think of the simple way.
Dennis provided the answer: system.time(add(unclass(as.data.frame(probs)))) I probably could have suggested Reduce days ago if I was anywhere near that efficient in my coding.... > > > probs <- t(matrix(rep(1:10000000), nrow=10)) # matrix with row-wise > > probabilites > > F <- matrix(0, nrow=nrow(probs), ncol=ncol(probs)); > > F[,1] <- probs[,1,drop=TRUE]; > > add <- function(x) {Reduce(`+`, x, accumulate = TRUE)} > > > > > > system.time(F.slow <- t(apply(probs, 1, cumsum))) > user system elapsed > 36.758 0.416 42.464 > > > > system.time(for (cc in 2:ncol(F)) { > + F[,cc] <- F[,cc-1,drop=TRUE] + probs[,cc,drop=TRUE]; > + }) > user system elapsed > 0.980 0.196 1.328 > > > > system.time(add(list(probs[,1], probs[,2], probs[,3], probs[,4], probs[,5], > > probs[,6], probs[,7], probs[,8], probs[,9], probs[,10]))) > user system elapsed > 0.420 0.072 0.539 Josh ______________________________________________ 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.