1

我正在尝试创建一个“for循环”设置,该设置将计算返回系列的不同滚动均值,其中我使用从最后 2 个观测值到最后 16 个观测值的滚动均值。kϵ[2,16]。我一直在尝试使用这样的函数,其中“rollmean”是动物园的一个函数。这会产生警告“警告消息:在 roll[i] <- rollmean(x, i) 中:要替换的项目数不是替换长度的倍数”有人可以帮我吗?

rollk <- function(x, kfrom= 2, kto=16){
roll <- as.list(kto-kfrom+1)
for (i in kfrom:kto){
roll[i]<- rollmean(x, i)
return(roll)
}}
4

2 回答 2

2

我想你想要

# library(zoo)
rollk <- function(x, kfrom = 2, kto = 16){
  roll <- list()
  ft <- kfrom:kto
  for (i in seq_along(ft)){
    roll[[i]]<- rollmean(x, ft[i])   
  }
  return(roll)
}

您的功能有几个问题:

  • 您需要[[访问单个列表元素,而不是[.
  • 你想要一个长度列表length(krom:kto)。现在,i从 开始1,而不是在kfrom
  • 现在,在循环之后roll返回。因此,该函数返回一个包含所有值的列表。for

上述函数的较短等效项:

rollk2 <- function(x, kfrom = 2, kto = 16)
  lapply(seq(kfrom, kto), function(i) na.omit(filter(x, 1 / rep(i, i))))

它不需要加载额外的包。

于 2014-01-29T13:29:14.867 回答
0

尝试这个:

library(zoo)
lapply(2:16, rollmean, x = x)
于 2014-01-29T16:33:57.563 回答