Thanks, Chuck's answer 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.