2012-07-25 23 views
6

Ho la seguente funzione qui sotto, che sto usando per analizzare argomenti della riga di comando, in modo che possa funzionare R script dalla riga di comando:funzione di R per analizzare argomenti della riga di comando

parseArguments <- function() { 
    text1 <- commandArgs(TRUE) 
    eval(parse(text=gsub("\\s", ";", gsub("--","", text1)))) 
    args <- list() 
    for(ar in ls()[! ls() %in% c("text1", "args")]) {args[ar] <- get(ar)} 
    return (args) 
} 

Ecco una CLI uscita sessione quando ho tentato di chiamare un R script che utilizza la funzione di cui sopra per analizzare argomenti CL, utilizzando seguenti parametri:

./myscript.R --param1='XLIF' --param2='ESX' --param3=5650.0 --param4=5499.2 --param5=0.0027397260274 --param6='Jul' --riskfreerate=0.817284313119 --datafile='/path/to/some/datafile.csv' --imagedir='/path/to/images' --param7=2012 --param8=2 
Error in parse(text = gsub("\\s", ";", gsub("--", "", text1))) : 
    8:10: unexpected '/' 
7: riskfreerate=0.817284313119 
8: datafile=/ 
      ^
Calls: parseArguments -> eval -> parse 
Execution halted 

Aiuto?

[[Update]]

ho seguito il consiglio di Dirk e installato la libreria optparse. Il mio codice ora assomiglia a questo:

library(optparse) 

# Get the parameters 
option_list <- list(
    make_option(c("-m", "--param1"), action="store_false"), 
    make_option(c("-t", "--param2"), action="store_false"), 
    make_option(c("-a", "--param3"), action="store_false"), 
    make_option(c("-s", "--param4"), action="store_false"), 
    make_option(c("-x", "--param5"), action="store_false"), 
    make_option(c("-o", "--param6"), action="store_false"), 
    make_option(c("-y", "--param7"), action="store_false"), 
    make_option(c("-r", "--riskfreerate"), action="store_false"), 
    make_option(c("-c", "--param8"), action="store_false"), 
    make_option(c("-d", "--datafile"), action="store_false"), 
    make_option(c("-i", "--imagedir"), action="store_false") 
) 

# get command line options, i 
opt <- parse_args(OptionParser(option_list=option_list)) 

Quando eseguo lo script R passandogli gli stessi parametri della riga di comando, ottengo:

Loading required package: methods 
Loading required package: getopt 
Error in getopt(spec = spec, opt = args) : 
    long flag "param1" accepts no arguments 
Calls: parse_args -> getopt 
Execution halted 

???

risposta

3

sto rispondendo tua seconda domanda, circa l'errore che si incontrano con optparse:

Dalla pagina make_option aiuto (...):

azione: Una stringa di caratteri che descrive l'azione optparse dovrebbe prendere quando incontra un'opzione, "store", "store_true" o "store_false". L'impostazione predefinita è "store" che indica che optparse deve memorizzare il seguente valore specificato se l'opzione viene trovata nella stringa di comando "store_true" memorizza TRUE se l'opzione viene trovata e "store_false" memorizza FALSE se l'opzione viene trovata.

In breve, è necessario utilizzare action = "store" (il default), se si desidera eseguire qualcosa di simile:.

./myscript.R --param1='XLIF' --param2='ESX' [...] 
7

Sì, ci sono pacchetti CRAN getopt e optparse solo per questo.

+0

+1 per il collegamento –

+0

, vedere il mio aggiornato domanda (utilizzando optparse) –

Problemi correlati