Skip to content

trevorld/r-getopt

Repository files navigation

getopt

CRAN Status Badge R-CMD-check Coverage Status RStudio CRAN mirror downloads Number of dependencies

optparse hex sticker

getopt is an R package designed to be used with Rscript to write "#!"-shebang scripts that accept short and long flags/options. Many users will prefer using instead the package optparse which adds extra features (automatically generated help option and usage, support for default values, basic positional argument support).

To install the last version released on CRAN use the following command:

install.packages("getopt")

To install the development version use the following command:

install.packages("remotes")
remotes:install_github("trevorld/r-getopt")

example

An example Rscript using getopt with R 4.4+ (i.e. support for %||% and |>):

#!/path/to/Rscript
library('getopt')
# get options, using the spec as defined by the matrix
# fmt: skip
spec <- matrix(c(
  'verbose', 'v', 2, "integer",
  'help'   , 'h', 0, "logical",
  'count'  , 'c', 1, "integer",
  'mean'   , 'm', 1, "double",
  'sd'     , 's', 1, "double"
), byrow = TRUE, ncol = 4L)
opt <- getopt(spec)

# if help was asked for print a friendly message and exit
if (isTRUE(opt$help)) {
  getusage(spec) |> cat()
  quit(status = 0)
}

# set reasonable defaults for options that were not specified
opt$mean <- opt$mean %||% 0
opt$sd <- opt$sd %||% 1
opt$count <- opt$count %||% 10L
opt$verbose <- opt$verbose %||% FALSE

# print some progress messages to stderr, if requested
if (opt$verbose) write("writing...", stderr())

# do some operation based on user input
rnorm(opt$count, mean = opt$mean, sd = opt$sd) |> cat(sep="\n")

An example Rscript using getopt for old versions of R:

#!/path/to/Rscript
library('getopt')
# get options, using the spec as defined by the matrix
spec <- matrix(c(
  'verbose', 'v', 2, "integer",
  'help'   , 'h', 0, "logical",
  'count'  , 'c', 1, "integer",
  'mean'   , 'm', 1, "double",
  'sd'     , 's', 1, "double"
), byrow = TRUE, ncol = 4L)
opt <- getopt(spec)

# if help was asked for print a friendly message and exit
if (!is.null(opt$help)) {
  cat(getusage(spec))
  quit(status = 0)
}

# set reasonable defaults for options that were not specified
if (is.null(opt$mean)) opt$mean <- 0
if (is.null(opt$sd)) opt$sd <- 1
if (is.null(opt$count)) opt$count <- 10L
if (is.null(opt$verbose)) opt$verbose <- FALSE

# print some progress messages to stderr, if requested
if (opt$verbose) write("writing...", stderr())

# do some operation based on user input
cat(rnorm(opt$count, mean = opt$mean, sd = opt$sd), sep = "\n")

About

R package providing basic command line optional argument parsing

Resources

License

Contributing

Stars

Watchers

Forks

Contributors