# Re: [R] Avoiding a loop

From: Daniel Malter <daniel_at_umd.edu>
Date: Fri, 08 Apr 2011 01:04:03 -0700 (PDT)

Hi,

this response uses the previous responses with an example:

#Assume you have 100 observations

n=100

#Simulate a time series of prices

error=rnorm(n,0,3)
raw.price=rpois(n,100)
lag.price=c(rpois(1,100),raw.price[1:99]) price=lag.price+error

#Say you want the moving average based on this
#and the four preceding prices
#define the moving average lag

MA.lag=4

#Create an index vector from MA.lag+1
#(the first time for which you can compute the MA)
#until the end

index=matrix((MA.lag+1):n)

#Define a function that computes the moving average
#by taking the mean over the observations
#from (x-MA.lag) to x

MA=function(x){mean(price[(x-MA.lag):x])}

#apply this function over all rows of the 'index' matrix
#which yields the moving averages

mov.av=apply(index,1,MA)

#Now apply the previous solutions
#First, create a T/F vector whether the price is greater
#than the moving average

S=price[(MA.lag+1):n]>mov.av

#Now create an indicator whether the relation between
#price and moving average changes

v1 <- sapply(2:(n-MA.lag),function(i)S[i]!=S[i-1])

#Output a data frame; when True, column 'signal'
#indicates that the system recommends a transaction
data=data.frame(price[(MA.lag+2):n],mov.av[-1],S[-1],v1) names(data)=c('price','moving.average','price.greater.ma','signal') data

HTH,
Daniel

```--
View this message in context: http://r.789695.n4.nabble.com/Avoiding-a-loop-tp3435070p3435559.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help