R/assign_to_missing.R

Defines functions set_defaults get_missing_params assign_to_missing

Documented in assign_to_missing

#' @title Assign arguments to missing parameters
#' @description Assign arguments to missing parameters.
#' @param ... Parameters.
#' @param values Values to assign to missing parameters.
#' @param rep If `TRUE`, will assign the same default argument to all missing parameters.
#' @param parent_frame The number of generations to go back. See [`parent.frame()`] for details.
#' @export
assign_to_missing <- function(..., values, rep = FALSE, parent_frame = 2) {
  missing_params <- get_missing_params(parent_frame)
  set_defaults(missing_params, values, rep, parent_frame)
}


get_missing_params <- function(parent_frame) {
  params <- as.list(parent.frame(parent_frame))
  are_missing <- sapply(params, function(x) identical(x, quote(expr = )))
  names(params)[are_missing]
}


set_defaults <- function(x, values, rep = FALSE, parent_frame) {
  if (isTRUE(rep)) {
    if (length(values) != 1) {
      stop('"values" must be of length one when rep=TRUE.')
    }
    values <- rep(values, length(x))
  } else if (!are_same_length(x, values)) {
    stop('length of values differs from x')
  }
  for (i in seq_along(x)) {
    assign(x[i], values[i], pos = parent.frame(parent_frame))
  }
}
arnaudgallou/toolkit documentation built on Nov. 25, 2022, 5:42 p.m.