2012-03-02 3 views
2

は、どのように私は以下のやろうとしていますようXTS加重和を計算するforループを避けることができます:xts加重和を計算するときにforループを回避する方法はありますか?

library(xts) 

thetaSum <- function(theta, w=c(1, 1, 1)) { 
    sum(coredata(theta)*rev(w)) 
} 

n <- 10 
tmpVec <- rep(1, n) 
tmpDates <- seq(as.Date("2000-01-01"), length = n, by = "day") 
theta <- xts(tmpVec, order.by=tmpDates) 

N <- 3 
thetaSummed <- xts(rep(NA, n), order.by=tmpDates) 

for (i in N:n) { 
    thetaTemp <- theta[(i-N+1):i, ] 
    thetaSummed[i] <- thetaSum(thetaTemp, w=rep(1, N)) 
} 

thetaSummed 

Nはnよりも小さく見えるバック期間です。

forループの代替手段は何ですか?

答えて

3

rollapplyを使用できます。

rollapplyr(theta, width=3, FUN=thetaSum, fill=NA) 
+0

はちょうどその上で展開する: 'rollapplyr'は' ALIGN = "右" ''ないrollapply'のラッパーがある(つまり '(I-N + 1):あなたの元のコードでi') 。デフォルトでは 'rollapply'は' align = "center"を行い、 'align =" left "を加えることでコード内に' i:i + 2'と同等のことを行います(ループを 'for (i in 1:(n-N + 1)){...} ') –

関連する問題