2014-01-29 76 views
1

我正在嘗試創建一個「for循環」設置,它將計算返回系列的不同滾動方式,其中我使用滾動方式,範圍從最後2次觀察到最後16次觀測。 Kε[2,16]。我一直在嘗試使用像這樣的函數,其中「rollmean」是來自動物園的函數。這會產生警告「警告消息: In 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

嘗試'卷[I]]' - 你迷茫的向量元素W /列表元素。 Ahhhh老鼠,由Sven忍者忍者:-( –

回答

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)))) 

它不需要加載額外的軟件包。

+0

非常感謝,這是做的伎倆!你可能已經理解我對R很新,並且幫助非常感謝:) – user3248544

+0

@ user3248544不客氣:) –

0

試試這個:

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