Parsing 解析R脚本中的命令行参数
是否有任何方便的方法可以自动解析传递给R脚本的命令行参数Parsing 解析R脚本中的命令行参数,parsing,r,command-line-arguments,Parsing,R,Command Line Arguments,是否有任何方便的方法可以自动解析传递给R脚本的命令行参数 类似于perl的Getopt::Long?在CRAN上有三个包: :C类getopt行为 :受Python的optparse库启发的命令行解析器 :命令行可选和位置参数解析器(受Python的argparse库启发)。此软件包要求Python解释器与argparse和json(或simplejson)模块一起安装 更新: :用于定义命令行界面,只需以特定格式对其进行描述。这是一个港口 :完全用R编写的跨平台命令行参数解析器,没有外部
类似于perl的
Getopt::Long
?在CRAN上有三个包:
- :C类getopt行为
- :受Python的optparse库启发的命令行解析器
- :命令行可选和位置参数解析器(受Python的argparse库启发)。此软件包要求Python解释器与
和argparse
(或json
)模块一起安装simplejson
- :用于定义命令行界面,只需以特定格式对其进行描述。这是一个港口
- :完全用R编写的跨平台命令行参数解析器,没有外部依赖项。这个包对于Rscript前端非常有用,并有助于将R脚本转换为可执行脚本
- :到最小列表JavaScript库的绑定。这个模块实现了Optimit的参数解析器的精髓,没有任何奇特的装饰(没有外部依赖)
- :使用简单、干净的语法从命令行解析选项。它只需要很少或不需要规范,并且支持长短选项、GNU、Java或Microsoft风格的语法、动词命令等等
i、 e.3个元素的列表,每个参数一个。只是为了补充Rscript答案:
edd@max:~$ r -e 'print(argv)' flim flam flom
[1] "flim" "flam" "flom"
edd@max:~$
我们只是在中使用
argv
。我很幸运地使用了两个可用解析包中较旧的一个 我可以在软件包中介绍ArgumentParser
吗?它是一个受Python的argparse
启发的命令行解析器,但它是Python免费的
的格式如下所示
rscript script.R--parameter1=argument1--parameter2=argument2
只需使用基本的字符串包就可以解析它
例子
cli.r
输出
universe
MCU
character
Wade Wilson
由于某种原因,
argparse
实际上需要Python。让我首先尝试optpasse
主动建议-尽管在R中使用优秀的python argparse包很有诱惑力,但跨语言依赖只会让R脚本变得更加复杂和脆弱。不要这样做。使用上面描述的pure-R选项之一。另外,似乎使用R的argparse库真的会减慢脚本速度。这与getopt
选项解析不同。请注意,我差不多7年前就回答了这个问题;现在肯定有更好的办法:)
edd@max:~$ r -e 'print(argv)' flim flam flom
[1] "flim" "flam" "flom"
edd@max:~$
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" )
}
}
}
universe
MCU
character
Wade Wilson