为什么(或什么时候)Rscript(或更小)比R CMD BATCH更好?

时间:2014-02-23 13:58:27

标签: r batch-file cmd cron rscript

我正在使用R中的cron自动执行某些网页抓取,有时我会使用R CMD BATCH,有时我会使用Rscript

要决定使用哪一个,我主要关注我是否需要.Rout文件。

但是在SO中阅读一些问题的答案(例如thisthis)似乎Rscript优先于R CMD BATCH

所以我的问题是:

  • 除了语法略有不同且R CMD BATCH保存.Rout文件而Rscript没有,两者之间的主要区别是什么?

  • 我应该何时优先选择另一个?更具体地说,在上面提到的cron工作中,其中一个是首选的吗?

  • 我尚未使用littler,它与RscriptR CMD BATCH有何不同?

2 个答案:

答案 0 :(得分:26)

据我所知:

R CMD BATCH:

  • 回显输入语句
  • 无法输出到stdout

Rscript:

  • 不回应
  • 输出到stdout
  • 可用于单行(即没有输入文件)

更小:

  • Rscript所做的一切
  • 可以从stdin读取命令(对流水线非常有用)
  • 更快的启动时间
  • 加载方法包

在实践中,我使用Rscript在命令行或crons中运行脚本。

答案 1 :(得分:21)

R CMD BATCH就是我们几年前所拥有的。它使i / o变得非常困难,并留下文件。

事情变得更好,首先是更小的,然后是Rscript。两者都可以用于' shebang'诸如

之类的行
 #!/usr/bin/r

 #!/usr/bin/Rscript

并且两者都可以与getopt和optparse等软件包一起使用---允许您编写可以充当命令的正确R脚本。如果有几十个,从这个简单的开始,我可以调用install.r pkga pkgb pkgc并且将为命令行安装所有三个及其依赖项,而不会占用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)

就像Karl一样,我有cronjobs调用类似的R脚本。

编辑于2015-11-04:截至上周,littler is now also on CRAN