Thanks, this is the closest to what i want (gives the same result as cumprod()) ...but using this function seems actually slower than the loop (is it normal ?):
a1<-runif(100000) cadd<-function(x) Reduce("*", x, accumulate = TRUE) looop<-function(a1){ j<-length(a1) for(i in 2:j){ a1[i]<-a1[i-1]*a1[i] } a1 } > > system.time(cadd(a1)) user system elapsed 1.344 0.004 1.353 > system.time(cumprod(a1)) user system elapsed 0.004 0.000 0.002 > system.time(looop(a1)) user system elapsed 0.772 0.000 0.775 > >On Tue, 13 Oct 2009, Kaveh Vakili wrote: > >> >> Hi all, >> >> I was wondering whether it is possible to use the lapply() function >> to alter the value of the input, something in the spirit of : >> >> a1<-runif(100) >> a2<-function(i){ >> a1[i]<-a1[i-1]*a1[i];a1[i] >> } >> a3<-lapply(2:100,a2) >> >> Something akin to a for() loop, but using the lapply() infrastructure. >> I haven't been able to get rapply() to do this. > >Maybe you want to check out > > ?Reduce > >For the example above, something like > >a3 <- Reduce( "*", a1, accumulate = TRUE ) > > >HTH, > >Chuck > >> >> The reason is that the "real" a2 function is a difficult function that only >> needs to be evaluated if the value of a1[i-1] meets some criteria. >> >> Thanks in advance, >> >> ______________________________________________ >> 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. >> > >Charles C. Berry (858) 534-2098 > Dept of Family/Preventive Medicine >E mailto:cbe...@tajo.ucsd.edu UC San Diego >http://famprevmed.ucsd.edu/faculty/cberry/ La Jolla, San Diego 92093-0901 > > > > ______________________________________________ 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.