【问题标题】:Can I specify mandatory arguments with optparse我可以用 optparse 指定强制参数吗
【发布时间】:2016-05-17 02:33:18
【问题描述】:

我正在使用optparse 包,但无法确定是否可以指定强制参数。

install.packages('optparse')
library('optparse')
library('data.table')

# example from vignette
option_list <- list(
  # those 2 are linked together by dest='verbose'
  # store_true makes sure it does not take any arg by storing TRUE (or default if specified)
  make_option(c("-v", "--verbose"), action="store_true", default=TRUE, help="Print extra output [default %default]"),
  make_option(c("-q", "--quietly"), action="store_false", dest="verbose", help="Print little output"),
  #
  make_option(c("-c", "--count"), type="integer", default=5L, help="Number of rgn [default %default]", metavar="number"),
  make_option("--generator", default="rnorm", help = "Function to generate random deviates [default \"%default\"]")
)
parser <- OptionParser(option_list=option_list)

# vanilla case
parsedArgs <- parse_args(parser, args = c("-c","100","--generator","fakeGen"))
setcolorder(setDT(stack(parsedArgs)),c('ind','values'))[]
#         ind  values
#1:   verbose    TRUE
#2:     count     100
#3: generator fakeGen
#4:      help   FALSE

假设我希望用户输入一个 [-d --date SOMEDATE] 提供默认日期并没有什么意义...我如何告诉 optparse 某些参数是强制性的?

【问题讨论】:

    标签: r command-line-arguments optparse rscript


    【解决方案1】:

    根据它的documentation,似乎optparse包没有实现强制功能。

    但是,作为一种解决方法,您始终可以检查参数值和stop() 脚本执行情况,以防参数未设置。

    一种方法可能是:

    install.packages('optparse')
    library('optparse')
    library('data.table')
    
    # example from vignette
    option_list <- list(
      make_option(c("-v", "--verbose"), action="store_true", default=TRUE, help="Print extra output [default %default]"),
      make_option(c("-q", "--quietly"), action="store_false", dest="verbose", help="Print little output"),
      make_option(c("-c", "--count"), type="integer", default=5L, help="Number of rgn [default %default]", metavar="number"),
      make_option("--generator", default="rnorm", help = "Function to generate random deviates [default \"%default\"]"),
      make_option(c("-d", "--date"), action = "store", default = NA, type = 'character',
                  help = "some date to be converted from character")
    )
    parser <- OptionParser(option_list=option_list)
    
    # check date is provided
    if (!is.na(parser$date)) {
      mydate <- as.Date(parser$date)
    }
    else {
      stop("date parameter must be provided. See script usage (--help)")
    }
    

    通过将日期的默认值设置为NA,我们可以稍后检查它是否已提供。

    注意:由于date 将包含用户的输入,如果as.Date() 函数无法解析给定的参数选项,您应该进行一些检查和/或处理可能发出的错误。

    【讨论】:

      猜你喜欢
      • 2020-06-14
      • 1970-01-01
      • 2018-11-25
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      • 2021-06-28
      相关资源
      最近更新 更多