有没有方便的方法可以自动解析传递给R脚本的命令行参数?
类似于perl中的Getopt::Long
?
有没有方便的方法可以自动解析传递给R脚本的命令行参数?
类似于perl中的Getopt::Long
?
在CRAN上有三个包:
argparse
和 json
(或 simplejson
)模块的 Python 解释器。更新:
argparse
实际上需要 Python。这使我首先尝试了 optparse
... - krlmlroptigrab
在opt_help()
中存在一个[bug][https://github.com/decisionpatterns/optigrab/issues/1],尽管已经提供了PR,但在4年多的时间里仍未得到解决。这使得它对于预期的用途来说相当不可用。 - Keiran Raine最简单的方法是使用commandArgs()函数。示例代码如下,将其保存为“options.R”:
options <- commandArgs(trailingOnly = TRUE)
options
使用“Rscript options.R x y z”运行。结果:
[1] "x" "y" "z"
i.e. 一个包含3个元素的列表,每个元素对应一个参数。
getopt
的选项解析不相似。 - Alex Reynoldsgetopt 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" )
}
}
}
上述脚本是为了简洁而编写的。请查看更具吸引力的版本。
rscript cli.R --universe=MCU --character="Wade Wilson"
输出
universe
MCU
character
Wade Wilson