0
私はxts
オブジェクトに複数の株式記号の時系列を含んでいます。シンボル固有のサブグループにxts
オブジェクトを分割し、各シンボルのデータを処理し、元のxts
行列のすべてのサブグループを再構成して、完全な行セットを含む必要があります。各シンボルは1〜4文字のフィールドで、サブグループ内のマトリックスを分割するための因子インデックスとして使用されます。なぜRのby()とlapply()のパフォーマンスの違いが大きいのですか?
これらはby()
、lapply()
とddply()
を呼び出すときに、私の行列を分割するために報告された時間です:データフレームと行列のサブグループでの作業に
> dim(ets)
[1] 442750 24
> head(ets)
Symbol DaySec ExchTm LclTm Open High Low Close CloseRet
2011-07-22 09:35:00 "AA" "34500" "09:34:54.697.094" "09:34:54.697.052" " 158100" " 158400" " 157900" " 158200" " 6.325111e-04"
2011-07-22 09:35:00 "AAPL" "34500" "09:34:59.681.827" "09:34:59.681.797" "3899200" "3899200" "3892200" "3894400" "-1.231022e-03"
2011-07-22 09:35:00 "ABC" "34500" "09:34:49.805.994" "09:34:49.806.008" " 400100" " 401800" " 400100" " 401600" " 3.749063e-03"
2011-07-22 09:35:00 "ALL" "34500" "09:34:59.009.001" "09:34:59.008.810" " 285500" " 285500" " 285300" " 285300" "-7.005254e-04"
2011-07-22 09:35:00 "AMAT" "34500" "09:34:59.982.447" "09:34:59.982.423" " 130200" " 130500" " 130200" " 130500" " 2.304147e-03"
2011-07-22 09:35:00 "AMZN" "34500" "09:34:48.012.576" "09:34:48.012.565" "2137400" "2139100" "2137400" "2139100" " 7.953588e-04"
... (15 more columns)
> system.time(by(ets, ets$Symbol, function(x) { return(x) }))
user system elapsed
78.725 0.932 79.735
> system.time(ddply(as.data.frame(ets), "Symbol", function(x) { return (x) }))
user system elapsed
100.590 0.416 101.105
> system.time(lapply(split.default(ets, ets$Symbol), function(x) { return(x) }))
user system elapsed
1.572 0.280 1.853
詳しい情報はthis優れたブログの記事でご利用いただけます。
なぜlapply/split.defaultを使用するとパフォーマンスに大きな違いがありますか?数字モードでの作業
がmyxts' 'の小さなサンプルを提供してください。私は 'by'を使わず、おそらく標準のxtsツールでやりたいことをする方法がありますが、再現可能な例がなければ分かりません。 –
はい、 'head(myxts)'が大きすぎます。行 'X:Y'が' Symbol'の複数の値を含んでいる 'myxts [X:Y、1:5]'はどうでしょうか? 'summary'は文字に役立つ何を教えてくれるのでしょうか? –
あなたは何をしようとしているのか分かりませんが、 'lapply(split.default(myxts、myxts $ Symbol)、str)'のようなものを呼び出してみてください。 –