创建一个循环,计算不同滚动平均长度的向量的滚动平均值

时间:2014-01-29 13:20:14

标签: r for-loop rolling-computation

我正在尝试创建一个“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)
}}

2 个答案:

答案 0 :(得分: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)的列表。现在,i1开始,而不是kfrom
  • 现在,在 roll循环之后,返回for。因此,该函数返回一个包含所有值的列表。

上述函数的等效时间较短:

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

不需要加载其他包。

答案 1 :(得分:0)

试试这个:

library(zoo)
lapply(2:16, rollmean, x = x)