2009-07-10 7 views
5

Existe-t-il un package pour traiter les options de ligne de commande dans R? Je connais commandArgs, mais c'est trop basique. Son résultat est fondamentalement l'équivalent à argc et argv en C, mais j'aurais besoin de quelque chose en plus de cela, tout comme boost::program_options en C++, ou GetOptions::Long en perl.Existe-t-il un package pour traiter les options de ligne de commande dans R?

En particulier, je voudrais spécifier à l'avance quelles options sont autorisées et donner un message d'erreur si l'utilisateur spécifie autre chose.

L'appel serait comme celui-ci (avec des options utilisateur --width = 32 --file = foo.txt):

R --vanilla --args --width=32 --file=foo.txt < myscript.R 

ou, si Rscript est utilisé:

myscript.R --width=32 --file=foo.txt 

(S'il vous plaît ne dites pas, "pourquoi ne l'écrivez-vous pas, ce n'est pas si dur." Dans d'autres langues, vous ne devez pas l'écrire vous-même. :)

Répondre

8
+0

Génial! Dommage que cela ne fasse pas partie de la distribution R (du moins pas dans R 2.8.1). – Frank

2

Que diriez-vous commandArgsaveceval pour une solution intégrée?

test.r

## 'trailingOnly=TRUE' means only parse args after '--args' 
args=(commandArgs(trailingOnly=TRUE)) 

## Supply default arguments 
if(length(args)==0){ 
    print("No arguments supplied.") 
    ##supply default values 
    a = 1 
    b = c(1,1,1) 
}else{ 
    for(i in 1:length(args)){ 
     eval(parse(text=args[[i]])) 
    } 
} 
print(a*2) 
print(b*3) 

et de l'invoquer

R CMD BATCH --no-save --no-restore '--args a=1 b=c(2,5,6)' test.R test.out 

Les mises en garde habituelles w.r.t utilisant eval appliquent bien sûr.

Sans vergogne volé de ce blog post.

Questions connexes