ff/ffdf および ffdfdply 関数を使用すると、「エラー: サイズ ... MB のベクトルを割り当てることができません」という問題が発生します。
ff および ffdf パッケージを使用して、グループ化された大量のデータを処理しようとしています。データ (ffdf テーブル形式) は次のようになります。
x =
id_1 id_2 month year Amount key
1 13 1 2013 -200 11
1 13 2 2013 300 54
2 19 1 2013 300 82
3 33 2 2013 300 70
.... (10+ Million rows)
一意のキーは、次のようなものを使用して作成されます。
x$key = as.ff(as.integer(ikey(x[c("id_1","id_2","month","year")])))
キー変数を使用してグループ化して要約すると、次のコマンドがあります。
summary = ffdfdply(x=x, split=x$key, FUN=function(df) {
df = data.table(df)
df = df[,list(id_1 = id_1[1], withdraw = sum(Amount*(Amount>0),na.rm=T), by = "key"]
df
},trace=T)
data.table の優れたグループ化機能を使用する (このディスカッションから得たアイデア)。実際のコードでは、Amount 変数に適用する関数がさらにありますが、これでも ffdf テーブル全体を処理することはできません (テーブルの小さなサブセットは正常に機能します)。
ffdfdplyis が大量の RAM を使用しているようで、次のようになります。
Error: cannot allocate vector of size 64MB
また、BATCHBYTES も役に立たないようです。ffdffply の経験がある人は、ffdf テーブルを事前にチャンクに分割せずに、これを行う他の方法を推奨できますか?