Parsing command line arguments in R scripts

ParsingRCommand Line-Arguments

Parsing Problem Overview


Is there any convenient way to automatically parse command line arguments passed to R scripts?

Something like perl's Getopt::Long?

Parsing Solutions


Solution 1 - Parsing

There are three packages on CRAN:

  • getopt: C-like getopt behavior
  • optparse: a command line parser inspired by Python's optparse library
  • argparse: a command line optional and positional argument parser (inspired by Python's argparse library). This package requires that a Python interpreter be installed with the argparse and json (or simplejson) modules.

Update:

  • docopt: lets you define a command line interface by just giving it a description in the specific format. It is a port a docopt.py.
  • argparser: cross-platform command-line argument parser written purely in R with no external dependencies. This package is useful with the Rscript front-end and facilitates turning an R script into an executable script.
  • minimist: A binding to the minimist JavaScript library. This module implements the guts of optimist's argument parser without all the fanciful decoration (no external dependencies)
  • optigrab: parse options from the command-line using a simple, clean syntax. It requires little or no specification and supports short and long options, GNU-, Java- or Microsoft- style syntaxes, verb commands and more.

Solution 2 - Parsing

The simplest way is to use commandArgs(). Example - save the code below as "options.R":

options <- commandArgs(trailingOnly = TRUE)
options

Run using "Rscript options.R x y z". Result:

[1] "x" "y" "z"

i.e. a list of 3 elements, one per argument.

Solution 3 - Parsing

Just to complement the Rscript answer:

edd@max:~$ r -e 'print(argv)' flim flam flom
[1] "flim" "flam" "flom"
edd@max:~$ 

We just use argv in littler. I had good luck with getopt, the older of the two available parsing packages.

Solution 4 - Parsing

May I introduce ArgumentParser in Xmisc package? It is a command line parser inspired by Python's argparse but it is Python-free.

http://cran.r-project.org/web/packages/Xmisc/vignettes/Xmisc-ArgumentParser.pdf

enter image description here

Solution 5 - Parsing

The getopt long is in the --parameter=argument format like so

rscript script.R --parameter1=argument1 --parameter2=argument2

It can be parsed by just using basic string packages.

Example

cli.r
library(pracma)
library(stringr)
run.arguments <- commandArgs(TRUE)
valid.run.parameters <- c( "universe", "character", "ability" )
for ( i in 1:length( run.arguments ) ) {
	if ( strcmpi( substr( run.arguments[i], 1, 2 ), "--" ) & grepl( "=", run.arguments[i], fixed = TRUE) ) {
		key.pair <- str_split( run.arguments[i], "=", simplify=TRUE )
		run.parameter <- gsub( "--", "", key.pair[1] )
		run.argument <- key.pair[2]
		if ( run.parameter %in% valid.run.parameters ) {

			# DO YOUR MAGIC HERE! Here is an example...
			cat( run.parameter, "\n" )
			cat( run.argument,  "\n\n" )

		}
	}
}

The above script was written for brevity. See the more compelling version.

Usage
rscript cli.R --universe=MCU --character="Wade Wilson"

Output

universe
MCU

character
Wade Wilson

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDavid BView Question on Stackoverflow
Solution 1 - ParsingrcsView Answer on Stackoverflow
Solution 2 - ParsingneilfwsView Answer on Stackoverflow
Solution 3 - ParsingDirk EddelbuettelView Answer on Stackoverflow
Solution 4 - Parsingxb.View Answer on Stackoverflow
Solution 5 - ParsingAbel CallejoView Answer on Stackoverflow