私はしばらくの間、遺伝子発現データを含む多数の大きなファイルを扱ってきましたが、最近、R 3.5.0にアップグレードした後、そのデータをRにロードする際に問題に遭遇しました。約8 GBのメモリ(Macには16 GBのRAM)を使用した後、別のファイルを読み取ろうとすると、次のエラーが表示されます。
Error: vector memory exhausted (limit reached?)
環境変数R_MAX_VSIZEをより高い値に設定しようとしていることを示唆する以前の投稿( エラー:ベクトルメモリを使い果たしました(制限に達しましたか?) )を見つけたので、次のことを試しました:
Sys.setenv(R_MAX_VSIZE = 16e9)
しかし、私はまだ同じエラーを受け取りました。環境変数を正しく設定していませんか?私が見逃しているものはありますか?
セッション情報:
R version 3.5.0 (2018-04-23)
Platform: x86_64-Apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.5
Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
locale:[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages: [1] data.table_1.11.4
loaded via a namespace (and not attached):
[1] compiler_3.5.0 tools_3.5.0
Rstudioを使用している場合、Sys.setenv('R_MAX_VSIZE'=32000000000)
の設定はコマンドラインでのみ機能し、Rstudioの使用中にそのパラメーターを設定してもこのエラーが防止されないことがわかりました。
Error: vector memory exhausted (limit reached?)
さらに読んだ後、 this スレッドが見つかりました。これは、Rstudioの問題を明確にし、以下に示す解決策を特定します。
ステップ1:ターミナルを開き、
ステップ2:
cd ~
touch .Renviron
open .Renviron
ステップ3:次を.Renviron
の最初の行として保存します。
R_MAX_VSIZE=100Gb
注:この制限には、物理メモリと仮想メモリの両方が含まれます。そのため、16Gbの物理メモリを搭載したマシンで_MAX_VSIZE = 16Gbを設定しても、このエラーが防止されない場合があります。マシンの仕様に応じて、このパラメーターを使用する必要があります。
R 3.5には、メモリ割り当てに関する新しいシステム制限があります。リリースノートから:
環境変数R_MAX_VSIZEを使用して、最大ベクトルヒープサイズを指定できるようになりました。 macOSでは、この環境変数で指定されていない限り、最大ベクトルヒープサイズは最大16GBと使用可能な物理メモリに設定されます。これは、macOSがメモリをオーバーコミットしたときにRプロセスが強制終了されるのを避けるためです。
これをオーバーライドできます。プロセスをオーバーロケートして強制終了するリスクがありますが、R 3.4.4または以前使用していたものでハードウォールにぶつかった場合、おそらくそれが起こっていました。
ターミナルで次を実行して、値32GBの一時的な環境変数R_MAX_VSIZE
を作成します(スーツに変更):export R_MAX_VSIZE=32000000000
または、Rセッションを開始するたびにターミナルを開いて実行したくない場合は、bashプロファイルに同じ行を追加できます。ターミナルを開き、bashプロファイルopen .bash_profile
を見つけ、テキストエディターで上記の行を追加します。
ターミナルを開き、そこからRを起動する必要があります。 R
を実行するだけで端末でRを実行するか、GUI open -n /Applications/R.app
を開くことができます。
Rセッションでこの変更を行うにはSys.setenv('R_MAX_VSIZE'=32000000000)
を使用し、値を確認するにはSys.getenv('R_MAX_VSIZE')
を使用します
コマンドラインに慣れていないかもしれない人のための解決策を見つけることができます here :
つまり、解決策はusethis
パッケージを使用することです。
usethis::edit_r_environ()
は、ホームディレクトリにある.Renvironを開きます。この.RenvironはすべてのRstudioの作業に影響します
usethis::edit_r_environ("project")
は、プロジェクトにローカルな.Renvironを開きます。このファイルに加えられた変更は、その特定のRstudioプロジェクトで行われた作業にのみ影響します。
開いたら、R_MAX_VSIZE
varを設定できます。
リンクされたページは このブログ にもリンクしており、Rの起動プロセスについて詳しく説明しています。