在 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 库)。此软件包要求安装带有 argparsejson(或 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 脚本中解析命令行参数的主要内容,如果未能解决你的问题,请参考以下文章

Python笔记:命令行参数解析

Python 命令行参数解析: optparse 模块

在命令行参数中解析 \ - python 2.7.3

如何解析命令行参数?

解析/传递命令行参数到bash脚本 - “$ @”和“$ *”之间有什么区别?

Argparse 命令行解析模块常用参数