36 lines
1.0 KiB
R
36 lines
1.0 KiB
R
|
|
||
|
#' Parses script arguments.
|
||
|
#'
|
||
|
#' @param defaults list of default parameters. Names of the provided defaults
|
||
|
#' define the allowed parameters.
|
||
|
#' @param args Arguments to parge, if missing the Rscript params are taken.
|
||
|
#'
|
||
|
#' @return calling script arguments of `Rscript`
|
||
|
#'
|
||
|
#' @export
|
||
|
parse.args <- function(defaults, args) {
|
||
|
if (missing(args))
|
||
|
args <- commandArgs(trailingOnly = TRUE)
|
||
|
if (length((args)) == 0)
|
||
|
return(defaults)
|
||
|
|
||
|
args <- strsplit(sub('--', '', args, fixed = TRUE), '=')
|
||
|
values <- Map(`[`, args, 2)
|
||
|
names(values) <- unlist(Map(`[`, args, 1))
|
||
|
|
||
|
if (!all(names(values) %in% names(defaults)))
|
||
|
stop('Found unknown script parameter')
|
||
|
|
||
|
for (i in seq_along(defaults)) {
|
||
|
name <- names(defaults)[i]
|
||
|
|
||
|
if (name %in% names(values)) {
|
||
|
value <- unlist(strsplit(values[[name]], ',', fixed = TRUE))
|
||
|
value <- eval(call(paste0('as.', typeof(defaults[[name]])), value))
|
||
|
defaults[[name]] <- value
|
||
|
}
|
||
|
}
|
||
|
|
||
|
defaults
|
||
|
}
|