Avoiding a loop
#Use the indexes of S in a sapply function. N <- 10 S <- sample(c(0,1), size=N, replace=TRUE) v1 <- sapply(c(1:N-1), function(i) S[i]&&S[i+1]) # Then v2 <- (P > m) # And I guess you can fill up the rest. Beware of the boundary condition (the NA in v1) Cheers, jcb! _______________________ http://twitter.com/jcborras
On Fri, Apr 8, 2011 at 5:30 AM, Worik R <worikr at gmail.com> wrote:
Friends.
I cannot simplify this much, and I think the loop is unavoidable. ?As a
recovering C programmer I want to avoid loops and in cases like this I
almost allways can by using an apply function. ?But I suspect in this case
there is nothing I can do.
It is a finance example where a price series is compared to a moving
average. ?If the price goes above the average, plus a bit, buy the
security. ?If we are holding the security and the price dips below the
moving average sell it.
P is the series of prices
m is the moving average series
S <- P>(m*1.005)
S[S]<-1
Now S is my signal it is 1 when P > m plus a margin of 0.005 x m
But now I need to control when S goes from 1 to 0. ?As far as I can tell
this is the only way...
for(i in 2:length(S)){
?if(S[i]==0 && S[i-1] == 1){
? ?## Was long, now short. ?SHould I be short? ?Is P>m still?
? ?if(P[i] > m[i]){
? ? ?## Stay long
? ? ?S[i] <- 1
? ?}
?}
}
As I mentioned I am a recovering C programmer, so I have a buit in loop
reflex, but I am struggling to adapt. ?But this one has me beat! ?Can anyone
help?
cheers
W
? ? ? ?[[alternative HTML version deleted]]
______________________________________________ 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.