R function for parsing command line arguments

I have the following function below, which I use to parse command line arguments, so I can run R scripts from the command line:

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

Here is the output of the CLI session when I tried to call an R script that uses the above function to parse CL arguments using the following command line arguments:

 ./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 

reference

[[Update]]

I followed the advice of Dirk and installed the optparse library. Now my code is as follows:

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

When I run the R script, passing it the same command line options, I get:

 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 

???

+6
source share
2 answers

I will answer your second question about the error you encountered with optparse :

On the help page of make_option (...):

Action: The character string describing the optparse action should be accepted when it encounters the "store", "store_true", or "store_false" option. By default, "store" means that optparse should store the value below if the option is found on the command line. store_true saves TRUE if an option is found, and store_false saves FALSE if this parameter is found.

In short, you need to use action = "store" (default) if you want to run something like:

 ./myscript.R --param1='XLIF' --param2='ESX' [...] 
+3
source

Yes, there are getopt and optparse CRAN packages for this.

+7
source

Source: https://habr.com/ru/post/921298/


All Articles