@thelatemail はすばらしい仕事をしてくれましたが、コードにエラーがあり (は関数内test[]
で置き換える必要がx[]
あります)、さらに重要なことに、ベクトルの最後で同じことをしなければなりませんでした (side=2 が必要な場合)。また、ウィンドウ サイズは、ベクトルの i 番目の要素の 2 倍 + 1 (および最後の n-i 番目の要素) にする必要があります。したがって、これが最終バージョンです。
movavg.grow = function(x,window) {
startma = sapply(1:(floor(window/2)),function(y) mean(x[1:((y-1)*2+1)]))
endma = sapply(1:(floor(window/2)),function(y) mean(x[(length(x)-((y-1)*2)):length(x)]))
endma = rev(endma)
c(startma,
filter(x,rep(1/window,window))[(floor(window/2):(length(x)- floor(window)/2)+1)],
endma)
}
テストに関しては、あなたが望むものは返さなければなりませ1:10
んx=1:10
> x=1:10
> x
[1] 1 2 3 4 5 6 7 8 9 10
> movavg.grow(x,5)
[1] 1 2 3 4 5 6 7 8 9 10
> movavg.grow(x,3)
[1] 1 2 3 4 5 6 7 8 9 10