R内からクリーンなRセッションを終了して再開しますか?


88

q()クリーンなRセッションを実行して再開するエイリアスをR内に作成する方法はありますか?

そして、はい、私は怠惰すぎて入力q()してから文字を入力することができませんR:)


でワークスペースをクリアすることはできますが、それはあなたがrm(list=ls())正しい意味ではありませんか?
Sacha Epskamp 2011年

2
また、添付したパッケージやその他のものを取り外しますか?
Spacedman 2011年

2
おそらく1つの提案は、ワークスペースを保存せずにRを再起動するなどの新しいオプションsaveパラメータをに追加することです。その後の別名はR.を再起動し、新しい機能に割り当てることができるq()"r"q("r")
グレッグ

回答:


78

RStudioを使用している場合:command / ctrl + shift + F10

使用することもできます

.rs.restartR()

12
「クリーンなRセッション」を開くには、1-現在のセッションのデータを削除する必要があると思います。2-現在のセッションのパッケージがアンロードされます。.rs.restartR()私のマシンではこれらのいずれも実行していないようです。
steadyfish 2016年

3
.rs.restartR()は、remove(list = ls());の後でもRがメモリを解放しない場合に役立ちます。gc();。これは間違いなくメモリを解放します。パッケージを切り離さないという事実も気に入っています。
リチャードディサルボ2017

56

Rの開始方法に応じて、次のいずれかの行を.Rprofileファイルに配置してみてください。

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

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

次に、これをRコンソールに入力します。

refresh

現在のセッションをシャットダウンし、新しいセッションを開始します。


4
または.Last <- function() system("R")またはシャットダウンサイクルの後半reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)。その後、q()戻ってき続けます。
マーティンモーガン

1
RがPATHにあることを確認してください。
G.グロタンディーク2014

2
このソリューションは機能しますが、私のスクリプトが他の人によって実行されている場合は再現できません。Rセッションを再開するためにRスクリプトに含めるコマンドはありますか?(理由は、すべてのパッケージを切り離したいからです)
ハイゼンベルク

13

.rs.restartR()は、ctrl + shift + F10を押すのと同じように機能することがわかりました。ただし、パッケージをアンロードしないでください


RStudioで動作しますが、他の場所で動作させる方法があるかどうかはわかりません。からgetAnywhere(".rs.restartR")はにあるようですtools:rstudio。純粋なRセッションでそれにアクセスする運はありませんでした。
グレゴールトーマス

11
.rs.restartR()パッケージをアンロードしないため、まったく同じではありませんctrl+shift+f10
Arthur

5

別の代替手段として、Emacs ESS(> = 16.10)は、デフォルトでinferior-ess-r-reload-hookバインドさC-c C-e C-rれている下位Rプロセスをリロードできます。


動作します!見事に!
agent 1819

4

古い投稿ですが、どの答えもうまく機能しません(私にとって、私はWindowsを使用しており、他の人をテストしていません)。そこで、ソリューションを追加します。私の用語のいくつかはここから外れているかもしれませんが、これは意味を理解するはずです:

上記の答えはうまくいきません

ここで送信された回答のほとんどは、新しいRコンソールを開いて元のコンソールを閉じるように指示している間、新しいコンソールは古いコンソールのアプリケーションコンテキストで実行されているプロセスであるため、使用するshellsystem、まったく機能しません。つまり、新しいコンソールが閉じるまで、元のコンソールを閉じることはできません。ヘッジダンドルバードなどの上記のユーザーの一部は、元のコンソールを閉じると新しいコンソールが強制的に閉じられると報告しました。試してみると、新しいコンソールは開きますが、新しいコンソールが閉じるまで、古いコンソールはフリーズした状態で開いたままになります。

基本的な問題は、アプリケーションコンテキストを呼び出すshellsystem、元のコンソールから新しいコンソールに変更しないため、新しいコンソールが閉じるまで元のプロセスを終了できないことです。

私のために働く代替案

代わりshell.execに、ファイルタイプに基づいてデフォルトのアプリケーションでファイルを開くために通常使用されるものを使用します。.exeで使用すると、明らかに実行可能ファイルが実行されます。ただし、重要な違いは、システムが独自の個別のコンテキストでアプリケーションを起動することです。だからここに私のために働くコードがあります:

makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)

/bin/x64/Rgui.exeRを開始するために使用するものと一致するようにファイルパスを編集する必要があります。この行を.Rprofileファイルに入れるだけrestart.Rで、Rコードを入力して呼び出すことができます。

他のメソッドに対するこれの欠点--no-saveは、ちょうどの場合のようにコマンドライン引数を渡すことができないことですshellが、少なくともこれにより、元のRプロセスを閉じることができます。


4

これに対する解決策を探した後、私は、このソリューションに基づいて私の問題を解決し、ここでRパッケージ使用して、RDCOMClientを
以下のソリューションは、キーを押すctrl + shift + F10をシミュレートすると、RStudio(Windows)内で機能します

RDCOMClientパッケージは、次のコマンドを使用してインストールする必要があります。

install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")

RStudio(Windows 10)内のキー押下をシミュレートするコードは次のとおりです。

library(RDCOMClient) 
wsh <- COMCreate("Wscript.Shell") 
wsh$SendKeys("^+{F10}") 

上記のコードの最後の行では、「ctrl」キーは「^」で表され、Shiftキーは「+」で表されます。この主要な表現に関するすべての説明は、ここにあります

@steadyfishのコメントによると、上記のコードの最後の行を実行した直後に、RStudioのRセッション全体がリセットされます。つまり、現在のセッションからすべてのデータを削除し、セッションにロードされたすべてのパッケージをアンロードします。


2

この関数を.Rprofileに記述します

r <- function() {
  assign('.Last',  function() {system('R')}, envir = globalenv())
  quit(save = 'no')
}

r()Rセッションを再開します。ロードされたパッケージはリロードされません。あなたの環境は保存されません。

Linuxで動作します。他のOSで何が起こるかわからない


1

Windowsで同じ更新セッション機能が必要でしたが、コードのバージョンが少し変更されました。

makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)

Windowsでは、Rprofile.siteファイルを変更する必要があります。Rのetcディレクトリの下にあります。またbin/x64、システム構成に応じて変更される可能性のあるパスの最後の部分にも注意してください。これが他の人にも役立つことを願っています。


1

マーティン・モーガンの使用の考えに沿って.Last(); これにより、以前に呼び出されたのと同じコマンドラインオプションのセットでRが再起動します。

restart_r <- function(status = 0, debug = TRUE) {
  if (debug) message("restart_r(): Customizing .Last() to relaunch R ...")
  assign(".Last", function() {
    args <- commandArgs()
    system2(args[1], args = args[-1])
  }, envir = globalenv())   
  if (debug) message("restart_r(): Quitting current R session and starting a new one ...")
  quit(save = "no", status = status, runLast = TRUE)
}

2
startup::restart()
参考

1

オプションで現在の作業ディレクトリを設定することで、Rの最適な使用法を実現できると思います。次に、ワークスペース/セッションファイルが表示され始めたり、(プロジェクト間で)十分な作業が行われたりすると、Rを閉じた後、作業ディレクトリでこのデフォルトのセッションファイルの名前を変更できます。R/ Rstudioは自動的に新しいセッションファイルを起動します。現在の作業を妨げることなく、ワークスペース/セッションファイル。

Rを終了し、現在のセッションファイルの名前を変更することを忘れないでください

もちろん、現在の作業を保存したくない場合は、オブジェクトをリセットするか、元のオブジェクトからコピーした後にオブジェクトの操作が行われたことを確認する必要があります。古いワークスペースをいつでもロードできることを知っているのは誘惑ですが、そうでないよりも便利です。

要するに、Rを終了すると、終了時にギャップが生じます。これは、このワークスペースがいっぱいであることを意味します。終了が完了したら名前を変更し、新しいワークスペースでR / Rstudioを再起動します。選択したオブジェクトはいつでも新しいワークスペースにロードできます。理想的には、すべての重要な作業がプロジェクトディレクトリにある必要がありますが、それでも時々戻るにはジョブの履歴が必要であり、保存されたセッションは、より長いプロジェクトに参加した後のある時点で役立ちます。あなたがそれのどれも必要としないならただrm(list=ls())

また、RDComClient@ Eduardo Alvinのアイデアは気に入っていますが、廃止されました。

代替オプション

ワークスペース内でいつでも手荷物を取り除くための簡単な代替手段は、 save.image

save.image("Rstreamingscience.data")
quit(save='no')
load("Rstreamingscience.data") ##G:/ADA registers##
save.image("Rstreamingscience.data")

これにより、自由に出入りして、必要な数のワークスペースを開くことできます。


0
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)

または--saveまたは--no-saveを使用

paste0(R.home(),"/bin/i386/R --no-save")

これは、refreshを呼び出す前にsetwd()を使用した場合に必要なものだと思います(ただし、これも元のバージョンも機能しません。Rを再起動してから自動的に閉じるため、新しいウィンドウが開かれることはありません。誰かがコメントできる場合これ、そうしてください)


これを試してみると、新しいウィンドウが開きますが、新しいウィンドウが閉じるまで、古いウィンドウはフリーズした状態で開いたままになります
Matthew

0

次の関数を書きました。覚えておいてください!使用できるのは1回だけで、Rセッションの再開後にリロードする必要があります。

clc <- function() {
  rm(list = ls(envir = globalenv()),envir = globalenv()) #clear Vars from global enviroment
  gc()  #grabage colector
  cat("\014") #clc
  .rs.restartR() #clear session
}

パッケージを切り離すと役立つ場合もあります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.