为什么(或何时)使用Rscript(或littler)比R CMD BATCH更好?

52

我正在使用cron自动化一些网页抓取的工作,有时我使用R CMD BATCH,有时我使用Rscript

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

但是阅读了一些SO上的答案(如这个这个),似乎更推荐使用Rscript而不是R CMD BATCH

所以我的问题是:

  • 除了语法略有差异且R CMD BATCH会保存一个.Rout文件而Rscript不会之外,它们两者之间的主要区别是什么?

  • 何时应该优先考虑其中一个?更具体地说,在上述作业中,是否有一个被优先考虑?

  • 我还没有使用过littler,它与RscriptR CMD BATCH有什么不同?

2个回答

40

据我所知:

R CMD BATCH:

  • 会回显输入语句
  • 无法输出到标准输出(stdout)

Rscript:

  • 不会回显
  • 可以输出到标准输出(stdout)
  • 可用于单行命令(即无需输入文件)

littler:

  • 具备Rscript所有功能
  • 可从标准输入(stdin)读取命令(有助于管道处理)
  • 启动时间更快
  • 加载methods包

1
@DirkEddelbuettel 您是正确的。在文档中将 commandArgsargv 配对会使搜索更好。顺便说一下,为什么不在 littler 初始化时修改 commandArgs(),使其更具可移植性并支持针对 Rscript 编写的代码呢?我已经提交了建议。 - jangorecki
那我们可以/应该删除这四五条评论吗?它们只是噪音。 - Dirk Eddelbuettel
关于您最近的评论:littler现在也是CRAN包 - Dirk Eddelbuettel
1
@DirkEddelbuettel 已修复。 - Karl Forner

32

R CMD BATCH只是我们多年前使用的工具。它使输入输出非常困难,而且会留下一些文件。

现在情况变得更好了,先是有了 littler,然后又有了 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 现在也在 CRAN 上了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接