私は 4GB の RAM を持っていますが、Linux の R で 147.6MB をメモリに取り込むのに問題がありますError: cannot allocate vector of size 147.6 Mb
。
どうすればこれを診断できますか?
これが私のコードです:
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 固有のものでした。
編集1
以下のコメントに対処するためのいくつかのコメント:
> 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
そのため、CSV から読み込まれたオブジェクトのサイズが大きく変化しているようには見えません。私は 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')
編集3
私のデータを調べたところ、問題はここにあるのではないかと思われます。Set3.csv には一般的なフィールド名がいくつかあったので、厄介な nxn 結合か何かを行っていたと思います。