[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