rollapply
配列のローリング マージンに関数を適用します。しかし、これは列ごとに行われます。つまり、関数に配列を提示するのではなく、ベクトルを N 回 (この場合は N=2) 提示します。
次に例を示します。
(m <- matrix(1:10, ncol=2))
## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [3,] 3 8
## [4,] 4 9
## [5,] 5 10
を実行し、各反復で何が渡されるかを確認しますrollapply
。mean
y <- rollapply(m, width=2, FUN=function(x) {print(x); mean(x)})
## [1] 1 2
## [1] 2 3
## [1] 3 4
## [1] 4 5
## [1] 6 7
## [1] 7 8
## [1] 8 9
## [1] 9 10
関数には行列は渡されず、個々のベクトルのみが渡されます。 rollapply
次に、結果を正しい形状の配列としてパッケージ化します。
y
## [,1] [,2]
## [1,] 1.5 6.5
## [2,] 2.5 7.5
## [3,] 3.5 8.5
## [4,] 4.5 9.5
修正は Grothendieck 氏のコメントにありby.column=FALSE
ますrollapply
。
z <- rollapply(m, width=2, by.column=FALSE, FUN=function(x) {print(x); colMeans(x)})
## [,1] [,2]
## [1,] 1 6
## [2,] 2 7
## [,1] [,2]
## [1,] 2 7
## [2,] 3 8
## [,1] [,2]
## [1,] 3 8
## [2,] 4 9
## [,1] [,2]
## [1,] 4 9
## [2,] 5 10
ここでは、それぞれ 2 行の行列が関数に渡されています。結果は上記と同じです。
z
## [,1] [,2]
## [1,] 1.5 6.5
## [2,] 2.5 7.5
## [3,] 3.5 8.5
## [4,] 4.5 9.5