簡體   English   中英

創建一個循環來計算不同滾動平均值長度的矢量的滾動平均值

[英]Creating a loop that calculates the rolling mean of a vector for different rolling mean lengths

我正在嘗試創建一個“ for循環”設置,該設置將計算返回系列的不同滾動方式,其中使用的滾動方式范圍從最后2個觀察值到最后16個觀察值。 Kε[2,16]。 我一直在嘗試使用這樣的函數,其中“ rollmean”是來自Zoo的函數。 這將產生警告“警告消息:在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)
}}

我想你要

# 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
  • 現在,在for循環之后返回roll 因此,該函數返回包含所有值的單個列表。

上面的函數的較短等效項:

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

它不需要加載其他軟件包。

嘗試這個:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM