On Fri, Oct 15, 2010 at 12:23 AM, Joshua Wiley <[email protected]> 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
______________________________________________
[email protected] 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.