私は4GBのRAMを持っており、LinuxではRのメモリに147.6MBのメモリが残っているというエラーメッセージが表示されています。Error: cannot allocate vector of size 147.6 Mb
。data.framesをマージするとメモリ不足エラーになる
どうすれば診断できますか?
IDs <- read.csv('Set1.csv') # 2 MB
Set2 <- read.csv('Set2.csv') # 240 MB
data <- merge(IDs, Set2, by='MemberID')
rm(IDs) # Remove junk!
rm(Set2) # Remove junk!
gc()
print('First merge complete')
Set3 <- read.csv('Set3.csv') # 25 MB
data <- merge(data, Set3, by='MemberID')
rm(Set3) # Remove junk!
gc()
print('Second merge complete')
実行は最初のprint文の後に一時的に停止させます。
は、ここに私のコードです。余分なメモリ使用量がどこから来ているのか分かりません。 Rのmemory()のドキュメントを見てみると、連続したメモリの問題のようですね。 UbuntuのRでこれを解決する方法はありますか?
ここでも同様の質問をしている他の人も見ていますが、提案された解決策はWindows固有のものでした。
EDIT 1
いくつかのコメントは以下のコメントに対処する:オブジェクトはCSVから読み込まれてからあまりにも多くのサイズを変更しているよう
> print(object.size(IDs), units="Mb")
1.3 Mb
> print(object.size(Set2), units="Mb")
142.6 Mb
> print(object.size(Set3), units="Mb")
12.5 Mb
だから、それは見ていません。私は
EDIT私はdata.table()を使用し、同じエラーを持って自分のコードを更新した2
... data.table()と残りの上にチェックします。これはおそらくそれが私のマシンにとって何となく特別なことを心配していますか?これは関係するファイルのサイズにとって非常に奇妙なようです。 Error: cannot allocate vector of size 147.6 Mb
IDs <- as.data.table(read.csv('Set1.csv')) # 2 MB
Set2 <- as.data.table(read.csv('Set2.csv')) # 240 MB
data <- merge(IDs, Set2, by='MemberID')
rm(IDs) # Remove junk!
rm(Set2) # Remove junk!
gc()
print('First merge complete')
Set3 <- as.data.table(read.csv('Set3.csv')) # 25 MB
data <- merge(data, Set3, by='MemberID')
rm(Set3) # Remove junk!
gc()
print('Second merge complete')
EDIT私のデータで確認3
、私はこの問題は、ここにも思います。 Set3.csvには一般的なフィールド名がいくつかあったので、それはnx nのジョイントなどをしていたと思います。
あなたは[The R Inferno]の第2サークル(https://www.google.com/url?q=http://www.burns-stat.com/pages/)のどこかにいると思います。家庭教師/ R_inferno.pdf&sa = U&ei = gr-ET_f2Ms_TiAKs-fH1BA&ved = 0CBAQFjAA&usg = AFQjCNFYCWUrzMj_7SOwr-EJ9Gu34VOl_w)。Mergeは非常にメモリを消費しますので、 'object.size'を見ると、Rに読み込んだらcsvファイルはそれよりもかなり大きくなっていると思います。 – Justin
' data.table() '大規模なデータオブジェクトをマージするために、メモリ管理と操作の両方の面で優れています。 – Chase
ちょっと確認するだけで、新鮮なRセッションに合っていますか? – jimmyb