[R] Is it possible to vectorize/accelerate this?

hihi v.p.mail at freemail.hu
Thu Nov 3 20:10:52 CET 2011


Dear Members,

I work on a simulaton experiment but it has an bottleneck. It's quite fast because of R and vectorizing, but it has a very slow for loop. The adjacent element of a vector (in terms of index number) depends conditionally on the former value of itself. Like a simple cumulating function (eg. cumsum) but with condition. Let's show me an example:
a_vec = rnorm(100)
b_vec = rep(0, 100)
b_vec[1]=a_vec[1]
for (i in 2:100){b_vec[i]=ifelse(abs(b_vec[i-1]+a_vec[i])>1, a_vec[i], b_vec[i-1]+a_vec[i])}
print(b_vec)

(The behaviour is like cumsum's, but when the value would excess 1.0 then it has another value from a_vec.)
Is it possible to make this faster? I experienced that my way is even slower than in Excel! Programming in C would my last try...
Any suggestions?

Than you,
Peter



More information about the R-help mailing list