web-dev-qa-db-ja.com

なぜ(またはいつ)RscriptがR CMD BATCHよりも優れているのですか?

Rcronを使用して一部のウェブスクレイピングを自動化しています。R CMD BATCHを使用することもあれば、Rscriptを使用することもあります。

どちらを使用するかを決定するには、.Routファイルが必要かどうかを主に検討します。

しかし、ここでいくつかの質問に対する回答をSO( this または this など)で読んでいると、Rscriptが好ましいようですR CMD BATCHへ。

だから私の質問は:

  • 構文が少し異なり、R CMD BATCH.Routファイルを保存しますが、Rscriptは保存しないという事実に加えて、2つのファイルの主な違いは何ですか?

  • いつどちらを優先するべきですか?より具体的には、上記のcronジョブで、それらの1つが優先されますか?

  • littlerをまだ使用していませんが、RscriptR CMD BATCHの両方とどう違うのですか?

39
Carlos Cinelli

R CMD BATCHは私たちが何年も前に持っていたすべてです。 I/Oが非常に難しくなり、ファイルが残ります。

状況は良くなりました。最初は小さく、次にRscriptを使用しました。どちらも「Shebang」ラインなどに使用できます

 #!/usr/bin/r

 #!/usr/bin/Rscript

両方ともgetoptやoptparseなどのパッケージで使用できます---コマンドとして機能する適切なRスクリプトを記述できます。それらが数十個ある場合、install.r pkga pkgb pkgcとして呼び出すことができ、3つすべてとその依存関係をインストールするこのような単純なものから始めて、Rプロンプトを独占することなく、コマンドラインから私のために:

#!/usr/bin/env r       
#
# a simple example to install one or more packages 

if (is.null(argv) | length(argv)<1) {
  cat("Usage: installr.r pkg1 [pkg2 pkg3 ...]\n")
  q()
}

## adjust as necessary, see help('download.packages') 
repos <- "http://cran.rstudio.com"

## this makes sense on Debian where no packages touch /usr/local 
lib.loc <- "/usr/local/lib/R/site-library"

install.packages(argv, lib.loc, repos)

そしてカールと同じように、私は同様のRスクリプトを呼び出すcronjobsを持っています。

2015年11月4日の編集:先週の時点で、 littlerは現在CRANにもあります

24

私が理解していることから:

R CMD BATCH:

  • 入力ステートメントをエコーする
  • stdoutに出力できません

Rscript:

  • エコーしない
  • stdoutへの出力
  • ワンライナーで使用できます(つまり、入力ファイルなし)

少し:

  • rscriptが行うことすべて
  • stdinからコマンドを読み取ることができます(パイプライン処理に役立ちます)
  • 起動時間の短縮
  • メソッドパッケージをロードする

実際には、Rscriptを使用して、コマンドラインまたはcronでスクリプトを実行します。

33
Karl Forner