7

これは、前の質問「同じサーバー上の異なるユーザー間で一貫した R 環境を確保するにはどうすればよいですか?」を明確にするためのフォローアップです。

コマンドを使用して R を起動した場合と同様に、R 内から「バニラ」R セッションに入りたいと思いR --vanillaます。たとえば、特定のユーザーのカスタム設定に惑わされないスクリプトを書きたいと考えています。

特に、次のことを希望します

  • R の履歴、プロファイル、または環境ファイルを読み取らない
  • 以前のセッションからデータまたはオブジェクトをリロードしません

help("vanilla")何も返さないし、カスタム設定の範囲に精通していないので、それらすべてから抜け出す方法を知ることができません.

新しいバニラ環境に入る方法はありますか? (?new.env役に立たないようです)

4

2 に答える 2

5

私見ですが、再現性のある研究インタラクティブなセッションはうまくいきません。開いている対話型セッションからではなく、コマンド ラインから呼び出される実行可能スクリプトを作成することを検討する必要があります。--vanillaスクリプトの先頭で、シバンに次を追加します。

#!/path/to/Rscript --vanilla

スクリプトで入力 (引数またはオプション) を読み取る必要がある場合は、コマンド ラインからそれらを解析するために、または?commandArgs2 つのパッケージのいずれかを使用できます。getoptoptparse

ユーザーがインタラクティブなセッションで本当に自分の作業を行う必要がある場合でも、ユーザーはそれを行い、 経由でスクリプトを呼び出すことができますsystem(): スクリプトは引き続き独自のバニラ セッションを使用します。入力と出力の受け渡しに関して、少し余分な作業があります。

于 2012-09-22T12:46:21.773 に答える
5

現在のセッションをバニラにすることはできませんが、次のように R 内から新しいバニラ R セッションを開始できます

> .Last <- function() system("R --vanilla")
> q("no")

上記をそのまま使用すると、R の再起動後にスクリプトの残りの部分が実行されなくなるため、おそらく問題が発生すると思います。次のコードでは、R は.Last終了する前に実行されます。  .Lastサイトファイルまたは環境ファイルを読み取らず、起動メッセージを出力せずに再起動するように指示します。再起動すると、コードが実行されます (その他のクリーンアップも実行されます)。

wd <- getwd()
setwd(tempdir())
assign(".First", function() {
  #require("yourPackage") 
  file.remove(".RData") # already been loaded
  rm(".Last", pos=.GlobalEnv) #otherwise, won't be able to quit R without it restarting
  setwd(wd)
  ## Add your code here
  message("my code is running.\n")
}, pos=.GlobalEnv)

assign(".Last", function() {
  system("R --no-site-file --no-environ --quiet")
}, pos=.GlobalEnv)
save.image() # so we can load it back when R restarts
q("no") 
于 2012-09-22T02:19:12.633 に答える