2016-02-07 45 views
2

我使用optparse包,但無法找到,如果我可以指定強制性參數指定的強制性參數。我可以用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一些ARG遊戲強制性?

回答

2

根據其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()功能發出的可能錯誤,如果它是不能夠解析給定參數選項