是否有一个包来处理R中的命令行选项?

时间:2009-07-10 15:46:06

标签: parsing command-line r options getopt

是否有一个包来处理R中的命令行选项?

我知道commandArgs,但这太基础了。它的结果基本上相当于argc中的argvC,但我需要更多的东西,就像boost::program_options中的C++一样,或GetOptions::Long中的perl

特别是,我想提前指定允许的选项,并在用户指定其他内容时给出错误消息。

调用将是这样的(使用用户选项--width = 32 --file = foo.txt):

R --vanilla --args --width=32 --file=foo.txt < myscript.R

或者,如果使用Rscript

myscript.R --width=32 --file=foo.txt 

(请不要说,“你为什么不自己写,不是那么难”。在其他语言中,你也不必自己写。)

2 个答案:

答案 0 :(得分:8)

答案 1 :(得分:2)

内置解决方案 commandArgs eval 怎么样?

<强> test.R

## 'trailingOnly=TRUE' means only parse args after '--args'
args=(commandArgs(trailingOnly=TRUE))

## Supply default arguments
if(length(args)==0){
    print("No arguments supplied.")
    ##supply default values
    a = 1
    b = c(1,1,1)
}else{
    for(i in 1:length(args)){
         eval(parse(text=args[[i]]))
    }
}
print(a*2)
print(b*3)

并调用它

R CMD BATCH --no-save --no-restore '--args a=1 b=c(2,5,6)' test.R test.out

使用 eval 的常见警告当然适用。

从这blog post无耻地偷走。