0
我有這樣的矩陣:主叫rollapply使用矩陣的每一列應用
> mtrx <- matrix(c(1:30), nrow=10)
> mtrx
[,1] [,2] [,3]
[1,] 1 11 21
[2,] 2 12 22
[3,] 3 13 23
[4,] 4 14 24
[5,] 5 15 25
[6,] 6 16 26
[7,] 7 17 27
[8,] 8 18 28
[9,] 9 19 29
[10,] 10 20 30
> is.matrix(mtrx)
[1] TRUE
我可以apply
函數(在這種情況下mean
)到每一列這樣:
> apply(mtrx, 2, mean)
[1] 5.5 15.5 25.5
我還可以將rollapply
函數用於特定列(在本例中爲第1列)
> require(zoo)
> rollapply(mtrx[,1], width = 2, by = 2, FUN = mean, align = "left")
[1] 1.5 3.5 5.5 7.5 9.5
如何結合上述方法並在每個矩陣列上執行rollapply
?我試過以下:
> apply(mtrx, 2, rollapply, width = 2, by = 2, FUN = mean, align = "left")
Error in mean.default(newX[, i], ...) :
'trim' must be numeric of length one
而且還提出方法here:
> apply(mtrx, 2, function(x) rollapply(width = 2, by = 2, FUN = mean, align = "left"))
Error in index(x) : argument "data" is missing, with no default
但兩者給我的,我不明白的錯誤。
關於錯誤,'apply'和'rollapply'都有一個'FUN'參數,所以你指定'FUN'代替'rollapply',因此所有的參數都被傳遞給「mean」函數代替「rollapply」函數 - 因此錯誤來自「mean」(「trim」是它的一個參數)。 –
@ G.Grothendieck和@DavidArenburg好的,我不需要使用'apply'我明白了。無論如何,如何將參數傳遞給'rollapply'而不是'apply',以及如何讓'rollapply'在矩陣行而不是列上運行(是't()'一種可能的解決方案)?我在問,因爲如果知道我原來的問題的答案,那麼我可以輕鬆實現這兩個目標。謝謝。 –
如果你想在行上操作,將MARGIN設置爲1.在你的情況下,你需要編寫一個匿名函數,例如apply(mtrx,1,function(x)rollapply(x,width = 2, by = 2,FUN = mean,align =「left」))'(類似於你的最後一次嘗試,你忘記了將'x'傳遞給'rollapply'.雖然也許'rollapply'提供了一個內置的解決方案IDK。正如所指出的,更好地閱讀「?rollapply」的文檔。 –