我可以使用optparse指定必填参数吗?

4
我正在使用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 一些参数是必需的?

1个回答

3
根据其文档,似乎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()函数可能发出的错误,如果它无法解析给定的参数选项

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接