在 R 脚本中解析命令行参数
Posted
技术标签:
【中文标题】在 R 脚本中解析命令行参数【英文标题】:Parsing command line arguments in R scripts 【发布时间】:2011-03-26 21:43:03 【问题描述】:有没有方便的方法来自动解析传递给 R 脚本的命令行参数?
类似于 perl 的 Getopt::Long
?
【问题讨论】:
与***.com/questions/2151212/…相关。 【参考方案1】:CRAN 上有三个包:
getopt: 类 C 的 getopt 行为 optparse:受 Python 的 optparse 库启发的命令行解析器 argparse:命令行可选和位置参数解析器(灵感来自 Python 的 argparse 库)。此软件包要求安装带有argparse
和 json
(或 simplejson
)模块的 Python 解释器。
更新:
docopt:让你定义一个命令行界面,只需给它一个特定格式的描述。它是一个docopt.py 的端口。 argparser:跨平台命令行参数解析器纯粹用 R 编写,没有外部依赖。这个包对 Rscript 前端很有用,有助于将 R 脚本转换为可执行脚本。 minimist:与极简主义 javascript 库的绑定。这个模块实现了 optimist 参数解析器的核心,没有任何花哨的装饰(没有外部依赖) optigrab:使用简单、干净的语法从命令行解析选项。它只需要很少或不需要规范,并支持短选项和长选项、GNU、Java 或 Microsoft 风格的语法、动词命令等。【讨论】:
出于某种原因,argparse
实际上需要 Python。让我先尝试optparse
...
不请自来的建议——尽管在 R 中使用出色的 python argparse 包很诱人,但跨语言依赖只会使您的 R 脚本更加复杂和脆弱。不要这样做。使用上述纯 R 选项之一。
另外,似乎使用 R 的 argparse 库确实会减慢您的脚本速度。【参考方案2】:
最简单的方法是使用 commandArgs()。示例 - 将下面的代码另存为“options.R”:
options <- commandArgs(trailingOnly = TRUE)
options
使用“Rscript options.R x y z”运行。结果:
[1] "x" "y" "z"
即 3 个元素的列表,每个参数一个。
【讨论】:
这和getopt
选项解析不一样。
请注意,我差不多 7 年前就回答了这个问题;现在肯定有更好的方法:)【参考方案3】:
只是为了补充 Rscript 的答案:
edd@max:~$ r -e 'print(argv)' flim flam flom
[1] "flim" "flam" "flom"
edd@max:~$
我们只是在littler 中使用argv
。我对getopt 很幸运,这是两个可用解析包中较旧的一个。
【讨论】:
【参考方案4】:我可以在Xmisc 包中介绍ArgumentParser
吗?它是一个命令行解析器,灵感来自 Python 的 argparse
,但它不依赖 Python。
http://cran.r-project.org/web/packages/Xmisc/vignettes/Xmisc-ArgumentParser.pdf
【讨论】:
【参考方案5】: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
【讨论】:
以上是关于在 R 脚本中解析命令行参数的主要内容,如果未能解决你的问题,请参考以下文章