R はサイズのベクトルを割り当てられません
このチュートリアルでは、エラー r はサイズのベクトルを割り当てられません
について説明します。
R はサイズのベクトルを割り当てられません
大量のデータを処理しようとすると、R で サイズのベクトルを割り当てられません
エラーが発生します。 このエラーは構文エラーではなく、大量の仮想メモリを使用するため、非常に大量のデータを処理するときに発生する論理的なエラーです。
ほとんどの場合、このエラーは、データがパッケージやその他のファイルなどの外部ソースから読み込まれたときに発生します。 コンパイラがオブジェクトのサイズを制御できない場合、サイズのベクトルを割り当てられません
というエラーがスローされます。
オブジェクトのベクトルを作成するか、関数をロードすると、エラーサイズのベクトルを割り当てることができません
が発生します。 このエラーは、小さなオブジェクトが多数ある場合に、小さなオブジェクトでも発生する可能性があります。
このエラーには、gc()
と memory.limit()
の 2つの解決策がありますが、gc()
はすべての状況で機能するとは限りません。 このチュートリアルでは、両方の方法を示します。
解決策 1: gc()
を使用したガベージ コレクション
ガベージ コレクションは、頭に浮かぶ最初のソリューションです。 サイズのベクトルを割り当てることができません
というエラーがあり、多くの状況で機能します。 しかし、データ量がはるかに多い場合、GC は機能しません。
R のガベージ コレクションには gc()
メソッドが使用されます。このエラーをスローする例を試してから、gc()
で解決してみましょう。
demo <- rnorm(5000000000)
上記のコードは、ランダムに分散された値からベクトルを作成します。システムによると、サイズのベクトルを割り当てることができません
というエラーがスローされるはずです。 出力を参照してください。
Error: cannot allocate vector of size 37.3 Gb
In addition: Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE, :
there is no package called 'Matrix'
ご覧のとおり、コンパイラはエラーのメモリを必要とします: サイズ 37.3 Gb のベクトルを割り当てることができません
、これは私たちのシステムでは不可能です。 GC を実行してから、このコードをもう一度実行してみましょう。
# Run GC
gc()
# Run the above code
demo <- rnorm(5000000000)
上記のコードは GC を実行してから、コードを再実行しようとします。 GC 後に 37.3
GB のメモリがある場合、エラーは解決されます。 そうしないと、エラーがスローされます。 出力を参照してください。
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 1004541 53.7 2078938 111.1 1255027 67.1
Vcells 2577662 19.7 8388608 64.0 2836345 21.7
Error: cannot allocate vector of size 37.3 Gb
ご覧のとおり、GC が少量のメモリをクリアしているため、まだ同じエラーがスローされていますが、これにはさらに多くのメモリが必要です。 したがって、gc()
は小さな状況でのみ機能します。
解決策 2: メモリ制限を増やす
しばらく前に、memory.limit()
を size
属性とともに使用して R のメモリ制限を増やすことができ、大きなデータの状況でも cannot vector of size
エラーを解決できました。 ただし、この方法は R ではサポートされなくなりました。R のドキュメントによると、OS オプションからメモリを増やすことができます。
ステップバイステップのプロセスに従ってメモリを増やし、サイズのベクトルを割り当てることができません
というエラーを解決します。
-
まず、RStudio が閉じていることを確認します。
-
Rプログラムのショートカットを見つけて右クリックし、
プロパティ
に移動します。 -
Properties
を入力したら、Shortcut
タブに移動し、Target
フィールドを探します。 -
ターゲット フィールドの末尾に次の行を追加します。
--max-mem-size=45000M--max-vsize=45000M
-
上記の行は、メモリを
45000
MB に増やします。これは 37.3 GB を超えています。 上記の行のvsize
は、ベクトル サイズを識別します。 -
最大メモリと最大ベクトル サイズを設定したら、RStudio を開いて次のコードを実行します。
demo <- rnorm(5000000000)
さて、このコードは demo
という名前のベクターをスローして作成します。 サイズ 37.3 GB は大きすぎます。 メモリをサポートできない場合、コンピュータがハングする可能性があります。
ただし、サイズのベクトルを割り当てることができません
というエラーが発生するたびに、このメソッドを使用して解決できます。
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn Facebook