有没有方便的方法来自动解析传递给R脚本的命令行参数?
类似于perl的Getopt::Long
?
答案 0 :(得分:42)
CRAN上有三个包:
argparse
和json
(或simplejson
)模块安装Python解释器。<强>更新强>:
答案 1 :(得分:28)
最简单的方法是使用commandArgs()。示例 - 将下面的代码保存为“options.R”:
options <- commandArgs(trailingOnly = TRUE)
options
使用“Rscript options.R x y z”运行。结果:
[1] "x" "y" "z"
即一个包含3个元素的列表,每个参数一个。
答案 2 :(得分:11)
只是为了补充Rscript答案:
edd@max:~$ r -e 'print(argv)' flim flam flom
[1] "flim" "flam" "flom"
edd@max:~$
答案 3 :(得分:5)
我可以在Xmisc包中介绍ArgumentParser
吗?它是一个受Python argparse
启发的命令行解析器,但它不含Python。
http://cran.r-project.org/web/packages/Xmisc/vignettes/Xmisc-ArgumentParser.pdf
答案 4 :(得分:0)
getopt long 的格式为 --parameter=argument
,就像这样
rscript script.R --parameter1=argument1 --parameter2=argument2
只需使用基本的字符串包即可解析。
cli.r
library(pracma)
library(stringr)
run.arguments <- commandArgs(TRUE)
valid.run.parameters <- c( "universe", "character", "ability" )
for ( i in 1:length( run.arguments ) ) {
if ( strcmpi( substr( run.arguments[i], 1, 2 ), "--" ) & grepl( "=", run.arguments[i], fixed = TRUE) ) {
key.pair <- str_split( run.arguments[i], "=", simplify=TRUE )
run.parameter <- gsub( "--", "", key.pair[1] )
run.argument <- key.pair[2]
if ( run.parameter %in% valid.run.parameters ) {
# DO YOUR MAGIC HERE! Here is an example...
cat( run.parameter, "\n" )
cat( run.argument, "\n\n" )
}
}
}
以上脚本是为了简洁而编写的。请参阅more compelling version。
rscript cli.R --universe=MCU --character="Wade Wilson"
输出
universe
MCU
character
Wade Wilson