我正在尝试创建一个“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)
}}
答案 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)
的列表。现在,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))))
不需要加载其他包。
答案 1 :(得分:0)
试试这个:
library(zoo)
lapply(2:16, rollmean, x = x)