q()
クリーンなRセッションを実行して再開するエイリアスをR内に作成する方法はありますか?
そして、はい、私は怠惰すぎて入力q()
してから文字を入力することができませんR
:)
q()
クリーンなRセッションを実行して再開するエイリアスをR内に作成する方法はありますか?
そして、はい、私は怠惰すぎて入力q()
してから文字を入力することができませんR
:)
save
パラメータをに追加することです。その後の別名はR.を再起動し、新しい機能に割り当てることができるq()
"r"
q("r")
回答:
RStudioを使用している場合:command / ctrl + shift + F10
使用することもできます
.rs.restartR()
.rs.restartR()
私のマシンではこれらのいずれも実行していないようです。
Rの開始方法に応じて、次のいずれかの行を.Rprofile
ファイルに配置してみてください。
makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv)
makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)
次に、これをRコンソールに入力します。
refresh
現在のセッションをシャットダウンし、新しいセッションを開始します。
.Last <- function() system("R")
またはシャットダウンサイクルの後半reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
。その後、q()
戻ってき続けます。
別の代替手段として、Emacs ESS(> = 16.10)は、デフォルトでinferior-ess-r-reload-hook
バインドさC-c C-e C-r
れている下位Rプロセスをリロードできます。
古い投稿ですが、どの答えもうまく機能しません(私にとって、私はWindowsを使用しており、他の人をテストしていません)。そこで、ソリューションを追加します。私の用語のいくつかはここから外れているかもしれませんが、これは意味を理解するはずです:
上記の答えはうまくいきません
ここで送信された回答のほとんどは、新しいRコンソールを開いて元のコンソールを閉じるように指示している間、新しいコンソールは古いコンソールのアプリケーションコンテキストで実行されているプロセスであるため、使用するshell
かsystem
、まったく機能しません。つまり、新しいコンソールが閉じるまで、元のコンソールを閉じることはできません。ヘッジダンドルバードなどの上記のユーザーの一部は、元のコンソールを閉じると新しいコンソールが強制的に閉じられると報告しました。試してみると、新しいコンソールは開きますが、新しいコンソールが閉じるまで、古いコンソールはフリーズした状態で開いたままになります。
基本的な問題は、アプリケーションコンテキストを呼び出すshell
かsystem
、元のコンソールから新しいコンソールに変更しないため、新しいコンソールが閉じるまで元のプロセスを終了できないことです。
私のために働く代替案
代わりshell.exec
に、ファイルタイプに基づいてデフォルトのアプリケーションでファイルを開くために通常使用されるものを使用します。.exeで使用すると、明らかに実行可能ファイルが実行されます。ただし、重要な違いは、システムが独自の個別のコンテキストでアプリケーションを起動することです。だからここに私のために働くコードがあります:
makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)
/bin/x64/Rgui.exe
Rを開始するために使用するものと一致するようにファイルパスを編集する必要があります。この行を.Rprofile
ファイルに入れるだけrestart.R
で、Rコードを入力して呼び出すことができます。
他のメソッドに対するこれの欠点--no-save
は、ちょうどの場合のようにコマンドライン引数を渡すことができないことですshell
が、少なくともこれにより、元のRプロセスを閉じることができます。
これに対する解決策を探した後、私は、このソリューションに基づいて私の問題を解決し、ここで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セッション全体がリセットされます。つまり、現在のセッションからすべてのデータを削除し、セッションにロードされたすべてのパッケージをアンロードします。
Windowsで同じ更新セッション機能が必要でしたが、コードのバージョンが少し変更されました。
makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)
Windowsでは、Rprofile.site
ファイルを変更する必要があります。Rのetc
ディレクトリの下にあります。またbin/x64
、システム構成に応じて変更される可能性のあるパスの最後の部分にも注意してください。これが他の人にも役立つことを願っています。
マーティン・モーガンの使用の考えに沿って.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)
}
オプションで現在の作業ディレクトリを設定することで、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")
これにより、自由に出入りして、必要な数のワークスペースを開くことができます。
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を再起動してから自動的に閉じるため、新しいウィンドウが開かれることはありません。誰かがコメントできる場合これ、そうしてください)
次の関数を書きました。覚えておいてください!使用できるのは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
}
パッケージを切り離すと役立つ場合もあります。
rm(list=ls())
正しい意味ではありませんか?