大きなファイルと小さなファイルをマージしようとすると壁に当たってしまいました。私はreadmany Rのメモリ管理に関する他の記事を持っており、それを解決する非極端な(64ビットのgo、クラスタへのアップロードなど)方法を見つけることができませんでした。私はbigmemoryパッケージを少し試しましたが、解決策を見つけることができませんでした。私は私が手を差し伸べる前にここで試してみると思った。大きなマージ/メモリ管理
私が実行しているコードは以下のようなものです:
#rm(list=ls())
localtempdir<- "F:/Temp/"
memory.limit(size=4095)
[1] 4095
memory.size(max=TRUE)
[1] 487.56
gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 170485 4.6 350000 9.4 350000 9.4
Vcells 102975 0.8 52633376 401.6 62529185 477.1
client_daily<-read.csv(paste(localtempdir,"client_daily.csv",sep=""),header=TRUE)
object.size(client_daily)
>130MB
sbp_demos<-read.csv(paste(localtempdir,"sbp_demos",sep=""))
object.size(demos)
>0.16MB
client_daily<-merge(client_daily,sbp_demos,by.x="OBID",by.y="OBID",all.x=TRUE)
Error: cannot allocate vector of size 5.0 MB
私が求めていると思います新しいハードウェアを購入する必要ありません。この周りの任意の巧妙な方法がありますか?
- より大きなオブジェクトを作成するには、
merge
にする必要があります。 - 私はその大きなオブジェクトで回帰などをする必要があります。
私はあきらめますか? bigmemoryはこれを解決するのに役立つはずですか?
ご迷惑をおかけして申し訳ございません。
詳細:Rバージョン2.13.1(2011-07-08)プラットフォーム:I386-PC-MINGW32/I386 (32ビット)のIntel 2 Duoプロセッサコア2.33GHz @、3.48ギガバイトRAM
あなたは 'data.table'パッケージを見ましたか?大規模なマージでは*高速*ですが、偶然にも起動時のメモリ効率は向上しますか? – Chase
これはおそらくあなたの問題を解決することはできませんが、ここで試すことができます。どちらのデータセットにも必要のない列がある場合は、データを読み込んだ後で列を削除し、gc()を実行してから再度マージを試みます。もう一つのアイデアは、できるだけメモリを使い果たしてしまうので、できるだけデータを行列に変換することです。 – Rguy