[R] How to eliminate this for loop ?
Greg Snow
Greg.Snow at imail.org
Mon Nov 8 21:15:00 CET 2010
If you are willing to shift the c vector by 1 and have 1 (the initial value) as the start of c, then you can just do:
cumsum( cc * b^( (n-1):0 ) ) / b^( (n-1):0 )
to compare:
cc <- c(1, rnorm(999) )
b <- 0.5
n <- length(cc)
a1 <- numeric(100)
a1[1] <- 1
system.time(for(i in 2:n ) {
a1[i] <- b*a1[i-1] + cc[i]
})
system.time(a2 <- cumsum( cc * b^( (n-1):0 ) ) / b^( (n-1):0 ))
all.equal(a1,a2)
Though you could have problems with the b^ part if the length gets too long.
--
Gregory (Greg) L. Snow Ph.D.
Statistical Data Center
Intermountain Healthcare
greg.snow at imail.org
801.408.8111
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of PLucas
> Sent: Monday, November 08, 2010 2:26 AM
> To: r-help at r-project.org
> Subject: [R] How to eliminate this for loop ?
>
>
> Hi, I would like to create a list recursively and eliminate my for loop
> :
>
> a<-c()
> a[1] <- 1; # initial value
> for(i in 2:N) {
> a[i]<-a[i-1]*b - c[i-1] # b is a value, c is another vector
> }
>
>
> Is it possible ?
>
> Thanks
> --
> View this message in context: http://r.789695.n4.nabble.com/How-to-
> eliminate-this-for-loop-tp3031667p3031667.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at 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.
More information about the R-help
mailing list