Title: | Command-Line Argument Parser |
---|---|
Description: | Cross-platform command-line argument parser written purely in R with no external dependencies. It is useful with the Rscript front-end and facilitates turning an R script into an executable script. |
Authors: | David J. H. Shih |
Maintainer: | David J. H. Shih <[email protected]> |
License: | GPL (>= 3) |
Version: | 0.7.2 |
Built: | 2024-10-27 05:49:59 UTC |
Source: | https://bitbucket.org/djhshih/argparser |
This function adds an argument to an arg.parser
object and returns
the modified object.
add_argument( parser, arg, help, default = NULL, type = NULL, nargs = NULL, flag = NULL, short = NULL )
add_argument( parser, arg, help, default = NULL, type = NULL, nargs = NULL, flag = NULL, short = NULL )
parser |
an |
arg |
argument name (use no prefix for positional arguments,
|
help |
help description for the argument |
default |
default value for the argument [default: NA] |
type |
variable type of the argument (which can be inferred from
|
nargs |
number of argument values (which can be inferred from
|
flag |
whether argument is a flag (and does not consume a value) [default: FALSE]; during argument parsing, a flag argument is FALSE by default if it is not set |
short |
short-form for flags and positional arguments; short-forms can be assigned automatically based on the first character of the argument name, unless a conflict arises with an existing short-form; to avoid conflicts, add the argument as early as possible |
This function supports multiple arguments in a vector. To ensure that the
argument variable type is set correctly, either specify type
directly
or supply default
argument values as a list.
Custom types are supported by defining a new class and a S4 method for
coerce
, see the examples section.
an arg.parser
object with the argument added
Dashes -
that occur in the stem of the argument names
(e.g. –argument-name) will be converted to underscores _
(e.g. argument_name) in the name of the corresponding variable.
p <- arg_parser("A text file modifying program") # Add a positional argument p <- add_argument(p, "input", help="input file") # Add an optional argument p <- add_argument(p, "--output", help="output file", default="output.txt") # Add a flag p <- add_argument(p, "--append", help="append to file", flag=TRUE) # Add multiple arguments together p <- add_argument(p, c("ref", "--date", "--sort"), help = c("reference file", "date stamp to use", "sort lines"), flag = c(FALSE, FALSE, TRUE)) # Print the help message print(p) # Example of custom type, using the example from pythons argparse setClass("perfectSquare") setMethod("coerce", c(from = "ANY", to = "perfectSquare"), function(from, to) { from <- as.numeric(from) if (!all.equal(from, as.integer(from))) { stop("Type error: ", from, " is not an integer!") } sqt <- sqrt(from) if (sqt != as.integer(sqt)) { stop("Type error: ", from, " is not a perfect square!") } from } ) p2 <- arg_parser("Perfect square checker") p2 <- add_argument(p2, arg = c("--perfect-square"), help = "A perfect square integer", type = "perfectSquare") parse_args(p2, c("--perfect-square", 144))
p <- arg_parser("A text file modifying program") # Add a positional argument p <- add_argument(p, "input", help="input file") # Add an optional argument p <- add_argument(p, "--output", help="output file", default="output.txt") # Add a flag p <- add_argument(p, "--append", help="append to file", flag=TRUE) # Add multiple arguments together p <- add_argument(p, c("ref", "--date", "--sort"), help = c("reference file", "date stamp to use", "sort lines"), flag = c(FALSE, FALSE, TRUE)) # Print the help message print(p) # Example of custom type, using the example from pythons argparse setClass("perfectSquare") setMethod("coerce", c(from = "ANY", to = "perfectSquare"), function(from, to) { from <- as.numeric(from) if (!all.equal(from, as.integer(from))) { stop("Type error: ", from, " is not an integer!") } sqt <- sqrt(from) if (sqt != as.integer(sqt)) { stop("Type error: ", from, " is not a perfect square!") } from } ) p2 <- arg_parser("Perfect square checker") p2 <- add_argument(p2, arg = c("--perfect-square"), help = "A perfect square integer", type = "perfectSquare") parse_args(p2, c("--perfect-square", 144))
This function is deprecated. Use add_argument
instead.
add.argument( parser, arg, help, default = NULL, type = NULL, flag = NULL, short = NULL )
add.argument( parser, arg, help, default = NULL, type = NULL, flag = NULL, short = NULL )
parser |
an |
arg |
argument name (use no prefix for positional arguments,
|
help |
help description for the argument |
default |
default value for the argument [default: NA] |
type |
variable type of the argument (which can be inferred from
|
flag |
whether argument is a flag (and does not consume a value) [default: FALSE] |
short |
short-form for flags and positional arguments; short-forms can be assigned automatically based on the first character of the argument name, unless a conflict arises with an existing short-form; to avoid conflicts, add the argument as early as possible |
an arg.parser
object with the argument added
This function creates an arg.parser
object. It infers the program
name from the file name of the invoked script.
arg_parser(description, name = NULL, hide.opts = FALSE)
arg_parser(description, name = NULL, hide.opts = FALSE)
description |
description of the program |
name |
name of the program |
hide.opts |
hide the |
The argument parser will be created by default with two arguments:
--help
and --opts
. The latter argument can be used for
loading a list of argument values that are saved in a RDS file.
a new arg.parser
object
p <- arg_parser("A test program")
p <- arg_parser("A test program")
This function is deprecated. Use arg_parser
instead.
arg.parser(description, name = NULL)
arg.parser(description, name = NULL)
description |
description of the program |
name |
name of the program |
a new arg.parser
object
Include R script with behaviour similar to C++ #include
"header.h"
, by searching in the directory where the
current script file resides.
include(file)
include(file)
file |
name |
This function uses an arg.parser
object to parse command line arguments or a
character vector.
parse_args(parser, argv = NULL)
parse_args(parser, argv = NULL)
parser |
an |
argv |
a character vector to parse (arguments and values should
already be split by whitespace);
if |
a list with argument values
p <- arg_parser('pi') p <- add_argument(p, "--digits", help="number of significant digits to print", default=7) ## Not run: # If arguments are passed from the command line, # then we would use the following: argv <- parse_args(p) ## End(Not run) # For testing purposes, we can pass a character vector: argv <- parse_args(p, c("-d", "30")) # Now, the script runs based on the passed arguments digits <- if (argv$digits > 22) 22 else argv$digits print(pi, digits=digits) ## Not run: # We can also save an argument list for later use saveRDS(argv, "arguments.rds") # To use the saved arguments, use the --opts argument at the command line #$ ./script.R --opts arguments.rds ## End(Not run)
p <- arg_parser('pi') p <- add_argument(p, "--digits", help="number of significant digits to print", default=7) ## Not run: # If arguments are passed from the command line, # then we would use the following: argv <- parse_args(p) ## End(Not run) # For testing purposes, we can pass a character vector: argv <- parse_args(p, c("-d", "30")) # Now, the script runs based on the passed arguments digits <- if (argv$digits > 22) 22 else argv$digits print(pi, digits=digits) ## Not run: # We can also save an argument list for later use saveRDS(argv, "arguments.rds") # To use the saved arguments, use the --opts argument at the command line #$ ./script.R --opts arguments.rds ## End(Not run)
This function is deprecated. Use parse_args
instead.
parse.args(parser, argv = commandArgs(trailingOnly = TRUE))
parse.args(parser, argv = commandArgs(trailingOnly = TRUE))
parser |
an |
argv |
a character vector to parse (arguments and values should already be split by whitespace) |
a list with argument values
This function prints the help message.
## S3 method for class 'arg.parser' print(x, ...)
## S3 method for class 'arg.parser' print(x, ...)
x |
an |
... |
unused arguments |
At the command line, we would use the --help
or -help
flag
to print the help message:
$ script --help
Extract label and help strings from parser.
show_arg_labels(parser)
show_arg_labels(parser)
parser |
|
a list containing a reg.args
, flags
, and
opt.args
list, which each containing a label
string and a help
string
Space string.
spaces(n)
spaces(n)
n |
number of spaces |
a character string containing n
spaces