[R] without the loop

Gabor Grothendieck ggrothendieck at gmail.com
Sat May 14 00:35:55 CEST 2005


On 5/13/05, Omar Lakkis <uofiowa at gmail.com> wrote:
> Can this be re-implemented to run faster (without the loop) ?
> 
> r <- list()
> n = nrow(prices)
>        for (i in (w+1):n) {
>                window <- prices[(i-w):(i-1),]
>                if (prices[i,]$settle > max(window$high)) r <-
> append(r,  1)
>                else if (prices[i,]$settle < min(window$low)) r <-
> append(r, -1)
>        }
> 

Given the complex looping it would be better if you provided
documentation with your post and a reproducible example, not
just a code snippet.  See the posting guide.

At any rate, it seems that what you want to do is to append 1
whenever the settle price exceeds the high of the last w
time points and a -1 whenever the settle price is below the low of
the last w time points.

Represent the prices as a zoo series with 3 columns: 
high, low, settle and use the following (untested) loop-free
code:

high <- 1; low <- 2; settle <- 3
W <- w+1
r <- rapply(prices, W, function(x) 
	sign(x[W,settle] > max(x[-W,high])) - (x[W,settle] < min(x[-W,low])),
	by.column = FALSE, align = "right")
)
r[r!=0]




More information about the R-help mailing list