这是使用处理命令行参数的另一种方法R CMD BATCH
。我的方法基于此处的早期答案,可让您在命令行中指定参数,并在R脚本中提供部分或全部默认值。
这是一个R文件,我将其命名为test.R:
defaults <- list(a=1, b=c(1,1,1)) ## default values of any arguments we might pass
## parse each command arg, loading it into global environment
for (arg in commandArgs(TRUE))
eval(parse(text=arg))
## if any variable named in defaults doesn't exist, then create it
## with value from defaults
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代码包装在一个函数中,只要我们注意环境即可:
## defaults should be either NULL or a named list
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)
}
## example usage:
parseCommandArgs(list(a=1, b=c(1,1,1)))
R CMD BATCH
是遗物。我喜欢它的地方是,它生成的.Rout
文件不仅包含脚本输出,而且还交织.R
产生该输出的脚本文件中的输入命令/注释。