2017-01-22 7 views
0

私は根本的なRの問題(バグ?)のように見えます。WindowsでのRメモリ管理の問題。ループ内でrを再起動することはできますか?

問題は私がRパッケージ開発に参加していて、かなり洗練された機能があることです。この関数を実行すると、gc()によって部分的に消去されるメモリに多くのゴミが残されます。その結果、ループ内でこの関数を実行したいときは、2〜3回目の反復で、Rは12〜16GBを消費し、不十分なメモリのために動作を停止します。

この問題は、私の共同編集者がLINUXで再現できないため、Windows固有の問題です。したがって、私の質問はこれです:ループ内でRの再起動を実行できますか?

私はこれがすべての変数を削除することを理解しますが、それは私が必要です。

など。良い解決策は、Rセッションを呼び出すスクリプトを作成し、その関数を実行してからRセッションを閉じることです。

+0

'rm(list = ls())'のようなものが必要ですか? – SamPassmore

+0

入力変数 'i'を取るRスクリプトを書くと、ループからの' ith'繰り返しを実行し、その結果をファイルに保存するように指示します。 Rscriptを使用してコマンドラインからこのRスクリプトを呼び出します。 – konvas

答えて

1

あなたの質問が重複していると、おそらくすぐにフラグが付けられてしまいますが、それまで、これはおそらくあなたの最善の策(from another question that is nearly identical to yours)です:

はあなたの.Rprofileファイルにこれらの行のいずれかを配置してみ

makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv) 

makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv) 

次に、Rコンソールにrefreshと入力します。現在のセッションをシャットダウンし、新しいセッションを開始します。

[Source】ここで

をしようとするいくつかのものです:

はRの内部からRを再起動:.rs.restartR()しかし、これは、未使用のファイルを消去しないことがあります。 source()またはgc()を使用する必要があります。

あなたは、コマンドライン

Here's a post asking the same questionand anotherからそれを実行する必要があるかもしれません。 Here's a great article about memory management in R

質問する前に必ずgoogleを押してください。このすべては非常に迅速に見つかりました。

+0

私はひどく残念ですが、私はこの答えに従っていません。私が正しく理解していれば、上記のコマンドは終了し、Rを再び開始します。しかし、これはまた、すべての手順を停止し、変数を削除します。私が必要とするものは、次のようなものです。for(i in 1:10){callNewR; xx < - runBigFution(i);新しいRを閉じる} makeActiveBindingはそれを行いますか? –

+0

私は確信していません - あなたはコードを投稿しませんでした。私はちょうどあなたの質問をグーグルといくつかの記事/記事を読んでください。将来的には、スタックオーバーフローに関する「Can I」質問を避けるようにしてください。「私は研究の不足から来ることができますか?もしあなたが* Can *に尋ねる必要があると思うなら、代わりにGoogleを使ってください。いくつかのことを試してみて、「このエラーが表示されたら、どうやって修正するのか、それとももっと良い方法を知っていますか」と言ったらこれはSOの目的に近いものです。確かに、コードがあなたの質問の中心でなければ、あなたはSOに尋ねる前に、より多くの研究をするべきです。 Googleが支援していない場合は、[#R on Freenode](http://irc.lc/freenode/r)を試すことができます。がんばろう。 –

関連する問題