Rで大きなオブジェクトを使用しようとすると問題が発生します。次に例を示します。
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there is room for
これは、メモリの連続したブロックを取得することの困難さに関連していることを理解しています(ここから):
サイズのベクトルを割り当てることができないエラーメッセージは、サイズがプロセスのアドレス空間の制限を超えたため、またはシステムがメモリを提供できなかったために、メモリを取得できなかったことを示します。32ビットのビルドでは、十分な空きメモリが利用できる可能性がありますが、マップするための十分に大きなアドレス空間の連続したブロックではないことに注意してください。
どうすればこれを回避できますか?私の主な問題は、スクリプトの特定のポイントに到達し、Rがオブジェクトに200〜300 Mbを割り当てることができないことです...他の処理にメモリが必要なため、ブロックを実際に事前に割り当てることはできません。これは、不要なオブジェクトをこまめに削除した場合でも発生します。
編集:はい、申し訳ありません:Windows XP SP3、4 Gb RAM、R 2.12.0:
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_Caribbean.1252 LC_CTYPE=English_Caribbean.1252
[3] LC_MONETARY=English_Caribbean.1252 LC_NUMERIC=C
[5] LC_TIME=English_Caribbean.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Calloc
でFree
メモリを使用できますが、これはベンジャミンが行っていることではないようです。