73

多くのメモリ内データを含む R (Windows 環境) でコードを実行しています。を使用rm(list=ls())してメモリをクリーンアップしようとしましたが、メモリがまだ占有されているようで、コードを再実行できません。Rを閉じてRを再起動しようとしましたが、コードを実行するとメモリを割り当てることができないと表示されるため、メモリがまだ占有されているようです(ただし、最初は可能でした)。PC を再起動して初めてメモリがクリーンアップされたようです。

毎回 PC を再起動せずにコードを再実行できるようにメモリをクリーンアップする方法はありますか?

4

8 に答える 8

91

たぶん、あなたは関数を使ってみることができますgc()。を呼び出すgc()と、ガベージコレクションが実行されます。大きなオブジェクトが削除された後に呼び出すとgc()、Rがメモリをオペレーティングシステムに戻すように促される可能性があるため、便利な場合があります。 gc()また、占有メモリの要約を返します。

于 2012-07-23T08:31:20.280 に答える
13

関数を使用ls()して、どの R オブジェクトがスペースを占めているかを確認します。rm("objectName") を使用して、不要になったオブジェクトを R メモリからクリアします。こちらご覧ください。

于 2014-10-18T10:27:45.080 に答える
3

Linux (Fedora 16) での例は、R が閉じられるとメモリが解放されることを示しています。

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       2854        974          0        344       1440                                                                                                                                                                    
-/+ buffers/cache:       1069       2759                                                                                                                                                                                                     
Swap:         4095         85       4010     

2854 メガバイトが使用されます。次に、R セッションを開き、乱数の大規模な行列を作成します。

m = matrix(runif(10e7), 10000, 1000)

マトリックスが作成されると、3714 MB が使用されます。

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       3714        115          0        344       1442                                                                                                                                                                    
-/+ buffers/cache:       1927       1902                                                                                                                                                                                                     
Swap:         4095         85       4010     

R セッションを閉じた後、使用したメモリ (2856 MB の空き容量) が正常に返されます。

$ free -m                                                                                                                                                                                                                                    
             total       used       free     shared    buffers     cached                                                                                                                                                                    
Mem:          3829       2856        972          0        344       1442                                                                                                                                                                    
-/+ buffers/cache:       1069       2759                                                                                                                                                                                                     
Swap:         4095         85       4010   

もちろん、Windows を使用していますが、この演習を Windows で繰り返して、R でこの大規模なデータセットを作成する前と作成した後に、使用可能なメモリがどのように変化するかを報告することができます。

于 2012-07-23T09:04:37.897 に答える
2

誰かが再起動してすぐにコマンドを実行する必要がある場合に備えて、参照用にこれを追加するだけです。

システムからRAMをクリアするためだけにこのアプローチを使用しています。不要になったすべてのオブジェクトを削除したことを確認してください。たぶんgc()、事前に役立つこともあります。しかし、R セッションの再起動ほど RAM をクリアする方法はありません。

library(rstudioapi)
restartSession(command = "print('x')")
于 2018-09-20T10:00:44.673 に答える
1

rm() と gc() でできることは限られています。Gavin Simpson が示唆しているように、R で実際のメモリを解放しても、R を閉じるか必要になるまで、Windows は多くの場合それを再利用しません。

通常、これは問題になりません。ただし、大きなループを実行している場合、長期的にはメモリの断片化につながることがあり、メモリを解放して R を再起動しても、断片化されたメモリによって大量のメモリの割り当てが妨げられることがあります。特に、R を実行しているときに他のアプリケーションに断片化されたメモリが割り当てられた場合。 rm() と gc() は必然的に遅延する可能性がありますが、RAM が多いほど優れています。

于 2019-07-02T15:07:28.890 に答える
0

「tmp」フォルダーに移動して、ハングしているすべてのrsessionファイルを削除すると役立つことがわかりました。これにより、通常、「スタック」していると思われるメモリが解放されます。

于 2018-06-21T14:02:26.697 に答える