42

一部のシミュレーション コードをベクトル化する過程で、メモリの問題に遭遇しました。Windows XP で 32 ビット R バージョン 2.15.0 (RStudio バージョン 0.96.122 経由) を使用しています。私のマシンには 3.46 GB の RAM があります。

> sessionInfo()
R version 2.15.0 (2012-03-30)
Platform: i386-pc-mingw32/i386 (32-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252   
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                           
[5] LC_TIME=English_United Kingdom.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] Matrix_1.0-6   lattice_0.20-6 MASS_7.3-18   

loaded via a namespace (and not attached):
[1] grid_2.15.0  tools_2.15.0

問題の最小限の例を次に示します。

> memory.limit(3000)
[1] 3000
> rm(list = ls())
> gc()
          used (Mb) gc trigger  (Mb)  max used   (Mb)
Ncells 1069761 28.6    1710298  45.7   1710298   45.7
Vcells  901466  6.9   21692001 165.5 173386187 1322.9
> N <- 894993
> library(MASS)
> sims <- mvrnorm(n = N, mu = rep(0, 11), Sigma = diag(nrow = 11))
> sims <- mvrnorm(n = N + 1, mu = rep(0, 11), Sigma = diag(nrow = 11))
Error: cannot allocate vector of size 75.1 Mb

(私のアプリケーションでは、共分散行列シグマは対角ではありませんが、どちらの方法でも同じエラーが発生します。)

午後は、R のメモリ割り当ての問題について読みました (ここここここを含む)。私が読んだことから、それは使用可能な RAM 自体の問題ではなく、使用可能な連続アドレス空間の問題であるという印象を受けます。それでも、75.1Mb はかなり小さいように思えます。

ご意見やご提案をいただければ幸いです。

4

4 に答える 4

58

ラスター パッケージを使用して同じ警告が表示されました。

> my_mask[my_mask[] != 1] <- NA
Error: cannot allocate vector of size 5.4 Gb

解決策は非常に単純で、R のストレージ容量を増やすことで構成されます。ここではコード行を示します。

##To know the current storage capacity
> memory.limit()
[1] 8103
## To increase the storage capacity
> memory.limit(size=56000)
[1] 56000    
## I did this to increase my storage capacity to 7GB

うまくいけば、これは問題を解決するのに役立ちます乾杯

于 2017-05-18T08:51:59.337 に答える
32

R は、OS が別の75.1Mb の RAM チャンクを R に割り当てることができないところまで来ています。これは、次のサブ操作を実行するために必要なメモリ チャンクのサイズです。これは、プロセス全体を完了するために必要な連続 RAM の量に関する記述ではありません。この時点で、使用可能なすべての RAM が使い果たされていますが、続行するにはさらに多くのメモリが必要であり、OS は R で使用できる RAM を増やすことができません。

これに対する潜在的な解決策は多岐にわたります。明らかな 1 つは、より多くの RAM を搭載した 64 ビット マシンを手に入れることです。詳細は忘れましたが、32 ビット Windows の IIRC では、単一のプロセスで使用できる RAM の量は制限されており (2GB?)、Windows 自体がメモリのチャンクを保持することに関係なく、R で使用できる RAM は R よりもやや少なくなります。あなたが持っている3.4Gb。64 ビット Windows R では、より多くの RAM を使用できるようになり、適合/インストールできる RAM の最大量が増加します。

それが不可能な場合は、別のアプローチを検討してください。おそらく、バッチあたりの n が よりもはるかに小さいバッチでシミュレーションを実行しますN。そうすれば、はるかに少ない数のシミュレーションを描画し、必要なことを何でも行い、結果を収集してから、十分なシミュレーションが完了するまでこのプロセスを繰り返すことができます。あなたはそれが何であるかを示していませんNが、私はそれが大きいと思うので、全体を把握するためNに何度も小さくしてみてくださいN.

于 2012-06-06T15:50:48.853 に答える
2

gc()助けられる

データを .RData として保存し、R を閉じてから再度開き、RData をロードすると役立ちます。

詳細については、 https ://stackoverflow.com/a/24754706/190791 で私の回答を参照してください。

于 2014-07-15T12:12:30.620 に答える