Parsing 解析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编写的跨平台命令行参数解析器,没有外部

是否有任何方便的方法可以自动解析传递给R脚本的命令行参数


类似于perl的
Getopt::Long

在CRAN上有三个包:

  • :C类getopt行为
  • :受Python的optparse库启发的命令行解析器
  • :命令行可选和位置参数解析器(受Python的argparse库启发)。此软件包要求Python解释器与
    argparse
    json
    (或
    simplejson
    )模块一起安装
更新

  • :用于定义命令行界面,只需以特定格式对其进行描述。这是一个港口
  • :完全用R编写的跨平台命令行参数解析器,没有外部依赖项。这个包对于Rscript前端非常有用,并有助于将R脚本转换为可执行脚本
  • :到最小列表JavaScript库的绑定。这个模块实现了Optimit的参数解析器的精髓,没有任何奇特的装饰(没有外部依赖)
  • :使用简单、干净的语法从命令行解析选项。它只需要很少或不需要规范,并且支持长短选项、GNU、Java或Microsoft风格的语法、动词命令等等

最简单的方法是使用commandArgs()。示例-将下面的代码另存为“options.R”:


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