这是另一种处理命令行参数的方法,使用R CMD BATCH
。我的方法基于此前在这里给出的答案,它允许您在命令行上指定参数,并在您的R脚本中为其中一些或全部参数提供默认值。
这是一个R文件,我将其命名为test.R:
defaults <- list(a=1, b=c(1,1,1))
for (arg in commandArgs(TRUE))
eval(parse(text=arg))
for (nm in names(defaults))
assign(nm, mget(nm, ifnotfound=list(defaults[[nm]]))[[1]])
print(a)
print(b)
在命令行中,如果我输入
R CMD BATCH --no-save --no-restore '--args a=2 b=c(2,5,6)' test.R
然后在 R 中,我们将有 a
= 2
和 b
= c(2,5,6)
。但是我可以省略 b
,并添加另一个参数 c
:
R CMD BATCH --no-save --no-restore '--args a=2 c="hello"' test.R
接下来在 R 语言中,我们将会有 a
= 2
,b
= c(1,1,1)
(使用默认值),以及 c
= "hello"
。
最后,为了方便起见,我们可以将 R 代码包装在一个函数中,只要我们对环境小心谨慎即可:
parseCommandArgs <- function(defaults=NULL, envir=globalenv()) {
for (arg in commandArgs(TRUE))
eval(parse(text=arg), envir=envir)
for (nm in names(defaults))
assign(nm, mget(nm, ifnotfound=list(defaults[[nm]]), envir=envir)[[1]], pos=envir)
}
parseCommandArgs(list(a=1, b=c(1,1,1)))
R CMD BATCH
已经是过时的工具了。不过我喜欢它之处在于它会生成一个.Rout
文件,该文件不仅包括脚本的输出结果,还会将产生该输出结果的.R
脚本文件中的输入命令/注释与输出交错地记录在同一个文件里。 - Bryce ThomasR CMD BATCH
更好地使用knitr
,例如Rscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R
(您可以将stitch
替换为stitch_rhtml
或stitch_rmd
,并且需要从Github安装knitr
,因为我刚刚发现了一个在stitch
中的错误...) - Yihui XieRscript myfile.R > path/to/mylog.Rout
,文件的输出不会打印到屏幕上,而是保存在你的.Rout
文件中。 - James PringleRscript myfile.R | tee mylog.Rout
。 - Heisenbergr Rscript -e“library(knitr); knitr :: stitch(commandArgs(TRUE)[1])”my_script.R
- petermeissner