docopt-要求每个参数具有特定的数据类型



我通常在Python中使用argparse,在R中使用docopt。我从argparse中错过的一个功能是为每个参数指定所需的数据类型。例如,在argparse中,我需要使用输入整数

parser.add_argument("square", help="display a square of a given number",
                type=int)

在docopt/R中,我在文档中找不到任何关于需要特定数据类型的内容。

-s <square>, --square=<square>   display a square of a given number #additional option to require integer input?

Python版本的docopt GitHub repo存在一个封闭的问题,这似乎表明这不是基本docopt的一部分,并为Python提供了一个解决方案,但这并不直接适用于R。有人能提供任何建议/更优雅的方法来使用docopt in R验证参数输入吗?

不确定这是否足够优雅,因为它涉及设置默认值,然后使用utils::type.convert确定的类/类型

"Usage: my_program.R [-hson FILE] [--quiet | --verbose] [INPUT ...]
-h --help        show this 
-s --sorted      sorted output
--coefficient=K  [default: 2.95] The K coefficient 
--numSim=K       [default: 200] number of simulations 
--output=FILE    [default: test.txt] Output file 
--directory=DIR  [default: ./] Some directory 
-o FILE          specify output file [default: ./test.txt]
--quiet          print less text
--verbose        print more text" -> doc
opts <- docopt(doc, "-s --quiet")
str(opts)
newopts <- lapply(opts, function(x) utils::type.convert(as.character(x),as.is=T))
(definedClasses <- unlist(lapply(newopts, typeof)))

当您运行程序时,您可以根据这个definedClasses测试输入。

您可能还想查看getoptoptparse/argparse包,以及R脚本中的SO post Parsing命令行参数

参考文献:

http://docopt.org

http://rgrannell1.github.io/blog/2014/08/04/command-line-interfaces-in-r

http://docopt.readthedocs.org/en/0.2.0/

我有点好奇为什么不将docopt与python一起使用,或者为什么不在R中使用argparse(或optparse)?

如果你想知道这是如何用optparseR包实现你要求的功能:

> library("optparse")
> parser = OptionParser()
> parser = add_option(parser, c("-s", "--square"), 
+    type="integer", 
+    help="display a square of a given number")
> typeof(parse_args(parser, "--square=5")$square)
[1] "integer"

如何使用argparse包(后一个包有python依赖项):

> parser = argparse::ArgumentParser()
> parser$add_argument("-s", "--square", 
+    type="integer",
+    help="display a square of a given number")
> typeof(parser$parse_args("--square=5")$square)
[1] "integer"

相关内容

  • 没有找到相关文章

最新更新