2017-09-11 41 views
1

在使用R创建命令行工具时,我决定使用docopt package。它适用于传递标志,但我无法弄清楚如何传递两个数字值。请参见下面的代码:无法通过docopt包传递两个数值参数

#! /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它警告我说的方法包被加载并返回没有别的运行。

  • 这是什么错误?

回答

1

首先,-h被指定两次:一次为“帮助”,另一次为“高”,所以你会遇到问题。为了解决这个问题,我将使用大写字母作为短参数。其次,选项的参数必须为<angular-brackets>或大写,因此-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 

(我发现docopt要求在http://docopt.org/我发现,他们的interactive docopt demo相当工作)

+0

谢谢您的详细解答,但是它必须是R(R版本3.4.1)中的一个bug,来自CRAN的docopt,因为它不起作用。 –

+1

好的,对不起,我最初将其解释为docopt中的一个问题(与原始版本不兼容),而不是R实现(似乎与任一版本窒息)。我发现你已经[已经提交了一个错误报告](https://github.com/docopt/docopt.R/issues/32),在我之前。 – r2evans

+1

我发现了错误。 docopt的R迭代在用法部分不处理./test.R,它必须是test.R –