3

「10000000*6」論理行列に値を代入しようとしています。プロセスは次のようになります。1) マトリックスを作成します。2) 次に、行列の各要素に値を割り当てます。質問を簡単にするために、行列の 1 つの要素に 1 つの値がどのように割り当てられるかを示します。

コードは次のとおりです。

m <- matrix(data = NA, ncol= 6, nrow= 10000000)
m[1,1] <- 1

エラー: サイズ 228.9 Mb のベクトルを割り当てることができません

「10000000*6」の論理行列を作成するときはエラーはありませんが、値を割り当てるときにエラーがあります。

私も同じタスクを実行しようとしましたが、より小さなマトリックス (100*6) を使用しました。物事はうまくいきます。

コードは次のとおりです。

m <- matrix(data = NA, ncol= 6, nrow= 100)
m[1,1] <- 1 

より大きなマトリックスを扱うのを手伝ってくれる人はいますか?

4

1 に答える 1

7

少し驚かれるかもしれませんが、R は少し先延ばし屋です。オブジェクトを「作成」するコマンドは、「実際の」値を行列に入力するなど、実際にアクションが必要になるまで実際には作成されない可能性があります。これを説明する用語は「pass-by-promise」です。さらに、既存のオブジェクトへの割り当ては、ガベージ コレクションが行われるまでスペースを占有するオブジェクトの複製または三重を構築する場合があります。

だからここにあなたがすることです。R を終了します。電源を切ります。すべてのアプリケーションがメモリを消費するため、最小限の他のアプリケーションでシステムを再起動します。R を再起動し、コマンドを実行します。システムがロードされる前に一般的な 4 GB のメモリが利用可能であれば、成功すると私は予測します。228.9 Mb はそれほど大きくありませんが、あなたの場合、ラクダの背中を壊したのはわらでした。R は、オブジェクトごとに連続したメモリを見つけることができる必要があり、ガベージ コレクションは通常、メモリの最適化を行いません。

于 2013-10-23T23:41:52.170 に答える