R函数解析命令行参数

6

我有以下函数,用于解析命令行参数,以便可以从命令行运行R脚本:

 parseArguments <- function() {
     text1 <- commandArgs(TRUE)
     eval(parse(text=gsub("\\s", ";", gsub("--","", text1))))
     args <- list()
     for( ar in ls()[! ls() %in% c("text1", "args")] ) {args[ar] <- get(ar)}
     return (args)
 }

以下是一个CLI会话输出,当我尝试调用一个使用上述函数解析CL参数的R脚本时,使用以下命令行参数:

./myscript.R --param1='XLIF' --param2='ESX' --param3=5650.0 --param4=5499.2 --param5=0.0027397260274 --param6='Jul' --riskfreerate=0.817284313119 --datafile='/path/to/some/datafile.csv' --imagedir='/path/to/images' --param7=2012 --param8=2
Error in parse(text = gsub("\\s", ";", gsub("--", "", text1))) : 
  8:10: unexpected '/'
7: riskfreerate=0.817284313119
8: datafile=/
            ^
Calls: parseArguments -> eval -> parse
Execution halted

需要帮助吗?

[[更新]]

我已经按照Dirk的建议安装了optparse库。我的代码现在看起来像这样:

library(optparse)

# Get the parameters
option_list <- list(
  make_option(c("-m", "--param1"), action="store_false"),
  make_option(c("-t", "--param2"), action="store_false"),
  make_option(c("-a", "--param3"), action="store_false"),
  make_option(c("-s", "--param4"), action="store_false"),
  make_option(c("-x", "--param5"), action="store_false"),
  make_option(c("-o", "--param6"), action="store_false"),
  make_option(c("-y", "--param7"), action="store_false"),  
  make_option(c("-r", "--riskfreerate"), action="store_false"),
  make_option(c("-c", "--param8"), action="store_false"),
  make_option(c("-d", "--datafile"), action="store_false"),
  make_option(c("-i", "--imagedir"), action="store_false")  
)

# get command line options, i
opt <- parse_args(OptionParser(option_list=option_list))

当我运行带有相同命令行参数的R脚本时,我得到了以下结果:
Loading required package: methods
Loading required package: getopt
Error in getopt(spec = spec, opt = args) : 
  long flag "param1" accepts no arguments
Calls: parse_args -> getopt
Execution halted

???

2个回答

7

4
我回答你的第二个问题,关于你遇到的optparse错误:
make_option帮助页面中得知:
action:描述当optparse遇到一个选项时应该采取的操作字符字符串,可选值为“store”、“store_true”或“store_false”。默认值是“store”,这意味着如果在命令字符串中找到了该选项,则optparse应该存储指定的后续值。“store_true”会在找到该选项时存储TRUE,“store_false”会在找到该选项时存储FALSE。
简言之, 如果你想执行像下面这样的操作,就需要使用 action = "store" (默认值):
./myscript.R --param1='XLIF' --param2='ESX' [...]

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