# Re: [R] Avoiding a loop

From: Kenn Konstabel <lebatsnok_at_gmail.com>
Date: Fri, 08 Apr 2011 10:03:38 +0300

2011/4/8 Juan Carlos Borrįs <jcborras_at_gmail.com>:
> #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])

You can achieve the same v1 using

v1.2 <- S[2:N-1] & S[2:N]

.. or if you insist on having NA as the first element, -- c(NA, v1.2)

Vectorization is more efficient than loops but this need not be true for the *apply functions.

>
> # Then
> v2 <- (P > m)
>
> # And I guess you can fill up the rest. Beware of the boundary
> condition (the NA in v1)
>
> Cheers,
> jcb!
> _______________________
>
> 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.
>>
>
> ______________________________________________
> 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.
>

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. Received on Fri 08 Apr 2011 - 07:21:20 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 08 Apr 2011 - 08:10:28 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.