2016-02-07 1 views
2

J'utilise le package optparse mais je ne parviens pas à savoir si je peux spécifier des arguments obligatoires.Puis-je spécifier des arguments obligatoires avec 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 

que je veux l'utilisateur d'entrer un [-d --date SOMEDATE] il ne fait pas vraiment de sens pour fournir une date par défaut ... Comment puis-je savoir optparse que certains args sont obligatoires?

Répondre

2

Selon son documentation, il ne semble pas que obligatoire fonctionnalité est implémentée par optparse package. Toutefois, pour contourner le problème, vous pouvez toujours vérifier la valeur du paramètre et stop() l'exécution du script si le paramètre n'est pas défini.

Une approche pourrait ressembler:

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)") 
} 

En définissant la valeur par défaut de date NA nous pouvons vérifier plus tard si elle a été fournie.

Note: puisque date contiendra l'entrée de l'utilisateur que vous devriez faire quelques vérifications et/ou gérer l'erreur probable émise par as.Date() fonction si elle ne peut pas analyser l'option de paramètre donné .