2017-05-27 7 views

答えて

2

興味深い質問です。ちょうど価格だけで時間がかからないので、absの計算は無視してみましょう。あなたの懸念はパフォーマンスがある場合は、ここでのタイミングのセットは、現在の提案を考慮することである。

library(microbenchmark) 
sample.xts <- xts(order.by = as.POSIXct("2004-01-01 00:00:00") + 1:1e6, matrix(rnorm(1e6 *4), ncol = 4), dimnames = list(NULL, c("A", "B", "C", "D"))) 

# See how quickly rowSum works on just the underlying matrix of data in the timings below: 
xx <- coredata(sample.xts) 

microbenchmark(
    coredata(sample.xts), 
    rowSums(xx), 
    rowSums(sample.xts), 
    rowSums(coredata(sample.xts)), 
.xts(x = rowSums(sample.xts), .index(sample.xts)), 
xts(rowSums(coredata(sample.xts)), index(sample.xts)), 
xts(rowSums(sample.xts),index(sample.xts)), 
Reduce("+", as.list(sample.xts)), times = 100) 

# Unit: milliseconds 
#             expr  min  lq  mean median  uq  max neval 
#         coredata(sample.xts) 2.558479 2.661242 6.884048 2.817607 6.356423 104.57993 100 
#           rowSums(xx) 10.314719 10.824184 11.872108 11.289788 12.382614 18.39334 100 
#         rowSums(sample.xts) 10.358009 10.887609 11.814267 11.335977 12.387085 17.16193 100 
#       rowSums(coredata(sample.xts)) 12.916714 13.839761 18.968731 15.950048 17.836838 113.78552 100 
#  .xts(x = rowSums(sample.xts), .index(sample.xts)) 14.402382 15.764736 20.307027 17.808984 19.072600 114.24039 100 
# xts(rowSums(coredata(sample.xts)), index(sample.xts)) 20.490542 24.183286 34.251031 25.566188 27.900599 125.93967 100 
#   xts(rowSums(sample.xts), index(sample.xts)) 17.436137 19.087269 25.259143 21.923877 22.805013 119.60638 100 
#      Reduce("+", as.list(sample.xts)) 21.745574 26.075326 41.696152 27.669601 30.442397 136.38650 100 

y = .xts(x = rowSums(sample.xts), .index(sample.xts)) 
y2 = xts(rowSums(sample.xts),index(sample.xts)) 
all.equal(y, y2) 
#[1] TRUE 

coredata(sample.xts)は、基礎となる数値行列を返します。私はあなたが期待できる最速のパフォーマンスはrowSums(xx)で与えられていると思います。これは "ベンチマーク"と考えることができます。問題は、xtsオブジェクトでそれを行う最も簡単な方法は何かです。それは .xts(x = rowSums(sample.xts), .index(sample.xts))はまともなパフォーマンスを与えるようです。

+0

素早く思いやりのある返信をしてくれてありがとうジョシュ。 – theGreatKatzul

+0

@theGreatKatzul:これはFXQuantTraderの返信です。私の唯一の貢献は、ヘッダーをマイクロベンチマークの出力に合わせることでした。 –

+0

ありがとうFXQuantTrader! – theGreatKatzul

3

ご異議が離れて選ぶとxがあなたのXTSはこれを試して、そのオブジェクトであれば、入力の要素を一緒に入れて持っている場合。 xtsオブジェクトを直接返します。

Reduce("+", as.list(x)) 
+0

返信いただきありがとうございます。私の主な関心事は、呼び出しがラップダー関数の内部に既に存在しているので、整頓であった。 – theGreatKatzul

関連する問題