Как избежать цикла for при вычислении взвешенной суммы xts? - PullRequest
2 голосов
/ 02 марта 2012

Как можно избежать циклического вычисления взвешенной суммы xts, как я пытаюсь сделать ниже:

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.

альтернативы для цикла?

1 Ответ

3 голосов
/ 02 марта 2012

Вы можете использовать rollapply.

rollapplyr(theta, width=3, FUN=thetaSum, fill=NA)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...