3

私は 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 結合か何かを行っていたと思います。

4

2 に答える 2

0

data.table()上記のコメントで提案されている @Chaseに切り替え、使用済みオブジェクトを自由に削除することで、最初のマージを処理することができました。問題を引き起こしていた後のマージは、実際には、2 番目のデータセットが一意でないキーを持つために予期していなかった場所でデカルト結合を行っていたことが判明したため、それを完全に削除する必要がありました。

データをサブセット化することで一時的にこれを回避しましたが、後で予測に適合するモデルを適用しようとしたときに同様のエラーが発生しました。

話の教訓は、上記の @Justin で示唆されているように、R 関数は着信ベクトル自体のサイズよりも多くのメモリを使用するということobject.sizeです。操作の処理中に RAM が不足している関数についても同様です。

于 2012-04-16T18:45:28.130 に答える