Parsing command line arguments in R scripts
33,076
Solution 1
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
andjson
(orsimplejson
) 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
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
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
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
Author by
David B
Updated on February 25, 2021Comments
-
David B over 3 years
Is there any convenient way to automatically parse command line arguments passed to R scripts?
Something like perl's
Getopt::Long
? -
krlmlr almost 11 yearsFor some reason,
argparse
actually requires Python. Made me tryoptparse
first... -
Alex Reynolds over 10 yearsThis is not similar to
getopt
option parsing. -
Chris Warth over 9 yearsunsolicited advice - as tempting as it is to use the outstanding python argparse package from within R, the cross-language dependency just makes your R script that much more complex and fragile. Don't do it. Use one of the pure-R options described above.
-
neilfws about 7 yearsPlease note I answered this almost 7 years ago; there's sure to be a better way now :)
-
twb10 almost 5 yearsAlso, it seems like using the argparse library for R really slows down your script.