3

複数回使用してから結果をマージするのではなく、一度だけ使用するように rollapply を使用しようとしています。xtsオブジェクトから複数ビットのデータを取得したいという考えです。以下のモック例では、スライディング ウィンドウの合計値と最大値を取得できるようにしたいと考えています。

require(xts)
v <- xts(rnorm(100),Sys.Date()-100:1)
rollapply(v,width=10,function(y){c(sum(y),max(y))})

これにより、次のエラーが発生します...

Error in xts(xx, tt, if (by == 1) attr(data, "frequency")) : 
  NROW(x) must match length(order.by)

以下は、私が実行していた sessionInfo です。

R version 2.15.2 (2012-10-26)
Platform: i386-apple-darwin9.8.0/i386 (32-bit)

locale:
[1] en_GB.UTF-8/en_GB.UTF-8/en_GB.UTF-8/C/en_GB.UTF-8/en_GB.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] xts_0.9-3 zoo_1.7-9

loaded via a namespace (and not attached):
[1] grid_2.15.2     lattice_0.20-10

私はこれを以前に理解したと思っていましたが、明らかにそうではありません....

4

2 に答える 2

3

これは、入力に列が 1 つしかない場合の現在の実装の制限です。入力に複数の列があることを確認し、 を設定by.column=FALSEし、関数を 1 つの列のみを使用するように調整することで、この問題を回避できます。

例えば:

require(xts)
v <- xts(rnorm(10),Sys.Date()-10:1)
f <- function(y) c(sum=sum(y[,1]), max=max(y[,1]))
rollapply(merge(v,v), width=3, f, by.column=FALSE)
于 2013-04-30T14:37:42.107 に答える
0

これはあなたがそれを行うことができる1つの方法です...

sapply( c("sum" , "max" ) , function(x) rollapply( v , width = 10 , FUN = eval(x) , align = "left" ) )
#              sum       max
#  [1,] -2.43662744 1.6931489
#  [2,] -1.95346657 1.6931489
#  [3,] -0.66191032 1.6931489
#  [4,] -1.97506474 1.6931489
#  [5,] -3.12090491 1.6931489
#  [6,] -6.32315512 0.6908325
#  [7,] -3.09130768 2.4151086
#  [8,] -1.27864497 2.4151086
#  [9,] -0.20942059 2.4151086
# [10,] -0.39156830 2.4151086
于 2013-04-30T13:44:57.133 に答える