R はサイズのベクトルを割り当てられません

Sheeraz Gul 2023年6月21日
  1. R はサイズのベクトルを割り当てられません
  2. 解決策 1: gc() を使用したガベージ コレクション
  3. 解決策 2: メモリ制限を増やす
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プログラムのショートカットを見つけて右クリックし、プロパティに移動します。

    R Properties

  • Properties を入力したら、Shortcut タブに移動し、Target フィールドを探します。

    R プロパティ ターゲット フィールド

  • ターゲット フィールドの末尾に次の行を追加します。
    --max-mem-size=45000M--max-vsize=45000M
    

    Rプロパティ増加メモリ

  • 上記の行は、メモリを 45000 MB に増やします。これは 37.3 GB を超えています。 上記の行の vsize は、ベクトル サイズを識別します。
  • 最大メモリと最大ベクトル サイズを設定したら、RStudio を開いて次のコードを実行します。
    demo <- rnorm(5000000000)
    

さて、このコードは demo という名前のベクターをスローして作成します。 サイズ 37.3 GB は大きすぎます。 メモリをサポートできない場合、コンピュータがハングする可能性があります。

ただし、サイズのベクトルを割り当てることができませんというエラーが発生するたびに、このメソッドを使用して解決できます。

著者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

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

関連記事 - R Error