R で大きなデータ セット (1 GB または 2 GB 以上) のタスクを計算する方法を学び、ff
パッケージとffdfdply
関数を使用しようとしています。(使用方法については、このリンクを参照してくださいffdfdply
: R 言語: 「グループ化」または ff パッケージでの分割に関する問題)
私のデータには次の列があります:
"id" "birth_date" "diagnose" "date_diagnose"
「id」ごとにいくつかの行があり、診断があった最初の日付を抽出したいと考えています。
私はこれを適用します:
library(ffbase)
library(plyr)
load(file=file_name); # to load my ffdf database, called data.f .
my_fun <- function(x){
ddply( x , .(id), summarize,
age = min(date_diagnose - birth_date, na.rm=TRUE))
}
result <- ffdfdply(x = data.f, split = data.f$id,
FUN = function(x) my_fun(x) , trace=TRUE) ;
result[1:10,] # to check....
非常に奇妙ですが、このコマンド:ffdfdply(x = data.f, .... )
は RStudio (および R) をクラッシュさせます。同じコマンドで R がクラッシュする場合とそうでない場合があります。たとえば、ffdfdply
(最初に機能した) 行を再度トリガーすると、R がクラッシュします。
また、他の機能やデータなどを利用しても同様の効果があります。メモリの増加や log.txt への影響はありません。summaryBy "technique" を適用した場合と同じ動作....
したがって、誰かが同じ問題を抱えていて解決策を見つけた場合、それは非常に役立ちます. またffdfdply
、非常に遅くなる (SAS よりも遅い...) ため、この種のタスクを作成する別の戦略を考えています。
ffdfdply
たとえば、データセットがID順に並べられていることを考慮していますか? (そのため、同じ ID を取得するためにすべてのデータを調べる必要はありません...)。
したがって、この問題に対する他のアプローチを知っている人がいればddply
、「RAM メモリが少ない R の大きなデータセット」のすべてのユーザーにとって、それは本当に素晴らしいことです。
これは私のsessionInfo()
R version 2.15.2 (2012-10-26)
Platform: i386-w64-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=Danish_Denmark.1252 LC_CTYPE=Danish_Denmark.1252
[3] LC_MONETARY=Danish_Denmark.1252 LC_NUMERIC=C
[5] LC_TIME=Danish_Denmark.1252
attached base packages:
[1] tools stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] plyr_1.7.1 ffbase_0.6-1 ff_2.2-10 bit_1.1-9