data.frame
のシーケンスを頻繁に(各回の何百万回)サブセット化する必要があります。 data.frame
は、およそ200行×30列のサイズです。状態に応じて、data.frame
の値は1つの反復から次の反復に変化します。したがって、最初に1つのサブセットを実行することは機能しません。質問とは対照的に小さなデータのサブセットを高速化する方法がありますか。
、when a data.table starts to be faster than a data.frame、私はdata.frame
が最速であると思われることを、次の最小再現性の例が示すdata.frame
/data.table
の与えられた大きさのためのサブセット化のスピードアップを探しています:
library(data.table)
nmax <- 1e2 # for 1e7 the results look as expected: data.table is really fast!
set.seed(1)
x<-runif(nmax,min=0,max=10)
y<-runif(nmax,min=0,max=10)
DF<-data.frame(x,y)
DT<-data.table(x,y)
summary(microbenchmark::microbenchmark(
setkey(DT,x,y),
times = 10L, unit = "us"))
# expr min lq mean median uq max neval
# 1 setkey(DT, x, y) 70.326 72.606 105.032 80.3985 126.586 212.877 10
summary(microbenchmark::microbenchmark(
DF[DF$x>5, ],
`[.data.frame`(DT,DT$x < 5,),
DT[x>5],
times = 100L, unit = "us"))
# expr min lq mean median uq max neval
# 1 DF[DF$x > 5, ] 41.815 45.426 52.40197 49.9885 57.4010 82.110 100
# 2 `[.data.frame`(DT, DT$x < 5,) 43.716 47.707 58.06979 53.5995 61.2020 147.873 100
# 3 DT[x > 5] 205.273 214.777 233.09221 222.0000 231.6935 900.164 100
パフォーマンスを向上させるためにできることはありますか?
編集入力後:
- 私は、離散イベントシミュレーションを実行していますし、各イベントのために、私は(私はそれが
data.frame
かdata.table
であるかどうかを気にしない)リストで検索する必要があります。おそらく、私は別のアプローチを実装することができますが、3年以上にわたって開発されたコードを書き直さなければなりません。現時点では、これは選択肢ではありません。しかし、それを早くする方法がなければ、これは将来の選択肢になるかもしれません。 - 技術的には、それは
data.frames
のシーケンスではなく、ただ1つのdata.frame
の1つで、繰り返しごとに変化します。しかし、これは「サブセットをもっと速くする方法」には影響しません。そして、その質問がより包括的であることを願っています。
データの実質的にランダムな選択をサブセット化しない限り、同じ方法でデータフレームを繰り返しリピートするのではなく、参照できる既存のサブセットのリストを作成することができますか? –
data.tableのサブセット化に伴うオーバーヘッドがあります。 http://stackoverflow.com/a/20179189/1412059 – Roland
実際の問題について適切な質問をする必要があります。何百万回もdata.framesをサブセット化する場合、あなたのアプローチは間違っています。 – Roland