【问题标题】:Creating a loop that calculates the rolling mean of a vector for different rolling mean lengths创建一个循环来计算不同滚动平均长度的向量的滚动平均值
【发布时间】:2014-02-21 07:55:06
【问题描述】:

我正在尝试创建一个“for 循环”设置来计算返回序列的不同滚动平均值,其中我使用从最后 2 次观察到最后 16 次观察的滚动平均值。 kϵ[2,16]。我一直在尝试使用这样的函数,其中“rollmean”是动物园的一个函数。这会产生警告“警告消息: 在 roll[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)
}}

【问题讨论】:

  • 试试roll[[i]]——你把向量元素和列表元素搞混了。啊,老鼠,斯文的忍者 :-(

标签: r for-loop rolling-computation


【解决方案1】:

我想你想要

# 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
  • 现在,rollfor 循环之后返回。因此,该函数返回一个包含 所有 个值的列表。

上述函数的较短等效项:

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

它不需要加载额外的包。

【讨论】:

  • 非常感谢,成功了!正如您可能已经理解的那样,我对 R 很陌生,非常感谢您的帮助:)
【解决方案2】:

试试这个:

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

【讨论】:

    猜你喜欢
    • 2018-10-03
    • 2021-06-04
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2019-01-20
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多