Re: [R] without the loop

From: Gabor Grothendieck <ggrothendieck_at_gmail.com>
Date: Sat 14 May 2005 - 08:35:55 EST

On 5/13/05, Omar Lakkis <uofiowa@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]

R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Sat May 14 08:39:52 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:31:45 EST