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、4Gb 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