【问题标题】:Can't pass two numerical arguments with docopt package无法使用 docopt 包传递两个数值参数
【发布时间】:2017-09-11 23:21:45
【问题描述】:

在使用 R 创建命令行工具时,我决定使用docopt package。它适用于传递标志,但我不知道如何传递两个数值。见以下代码:

#! /usr/bin/Rscript

'usage: ./test.R [-lr <low> -hr <high>]

options:
 -h --help         Shows this screen
 -lr --low <low>         Passes low risk investiment
 -hr --high <high>        Passes high risk investiment' -> doc

library(docopt)
# retrieve the command-line arguments
opts <- docopt(doc)
# what are the options? Note that stripped versions of the parameters are added to the returned list
cat(opts$high)
cat(opts$low)
str(opts) 

每当我尝试使用 ./test.R -lr 2000 -hr 4000 运行时,它都会警告我正在加载方法包并且不返回任何其他内容。

  • 我的错误是什么?

【问题讨论】:

    标签: r docopt


    【解决方案1】:

    首先,-h 被指定了两次:一次用于“帮助”,另一次用于“高”,因此您会在那里遇到问题。为了解决这个问题,我将使用大写字母作为短参数。其次,选项的参数必须是&lt;angular-brackets&gt; 或大写字母,所以-lr 不起作用。 (显然它还需要在选项和它的参数之间有一个空格。)我将把它扩展为与长选项相同的命名参数。

    另外(虽然可能不是严格要求),我认为逗号有助于澄清事情。 (编辑:显然docopt.R 不喜欢使用领先的./,所以我更新了输出。)

    usage: test.R [-L <low> -H <high>]
    
    options:
     -h, --help                 Shows this screen
     -L <low>, --low <low>     Passes low risk investiment
     -H <high>, --high <high>  Passes high risk investiment
    

    (我在http://docopt.org/ 找到了docopt 的要求。我发现他们的interactive docopt demo 也工作得很好。)

    【讨论】:

    • 感谢您的详尽回答,但它一定是 R(R 版本 3.4.1)中的一个错误,其中包含 CRAN 的 docopt,因为不幸的是它不起作用。
    • 好的,抱歉,我最初将其解释为一般的 docopt 问题(与您的原始版本不兼容),而不是 R 实现(似乎与任一版本都存在问题)。我看到你已经already filed a bug report,远远领先于我。
    • 我发现了错误。 docopt的R迭代不处理使用部分的./test.R,必须是test.R
    猜你喜欢
    • 2023-03-08
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多