Parse arguments of an R script

Created on 11 July 2013
Revised on Thu Jul 11 23:48:12 2013

original post is here

R can be used also as a scripting tool. We just need to add shebang in the first line of a file (script):
#!/usr/bin/Rscript
and then the R code should follow.

Often we want to pass arguments to such a script, which can be collected in the script by the commandArgs() function. Then we need to parse the arguments and conditional on them do something. I came with a rather general way of parsing these arguments using simply these few lines:

Collect arguments

args <- commandArgs(TRUE)

Default setting when no arguments passed

if(length(args) < 1) {
  args <- c("--help")
}

Help section

if("--help" %in% args) {
  cat("
      The R Script

      Arguments:
      --arg1=someValue   - numeric, blah blah
      --arg2=someValue   - character, blah blah
      --arg3=someValue   - logical, blah blah
      --help              - print this text

      Example:
      ./test.R --arg1=1 --arg2="output.txt" --arg3=TRUE \n\n")

  q(save="no")
}

Parse arguments (we expect the form –arg=value)

parseArgs <- function(x) strsplit(sub("^--", "", x), "=")
argsDF <- as.data.frame(do.call("rbind", parseArgs(args)))
argsL <- as.list(as.character(argsDF$V2))
names(argsL) <- argsDF$V1

Arg1 default

if(is.null(args$arg1)) {
  ## do something
}

Arg2 default

if(is.null(args$arg2)) {
  ## do something
}

Arg3 default

if(is.null(args$arg3)) {
  ## do something
}

… your code here …