File: isRequiresOk.R

package info (click to toggle)
r-cran-paramhelpers 1.14.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 992 kB
  • sloc: ansic: 102; sh: 13; makefile: 2
file content (45 lines) | stat: -rw-r--r-- 1,801 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#' @title Check if parameter requirements are met.
#'
#' @description
#' Check if a parameter value satisfies the requirements of the
#' parameter description. This only checks the `requires` expressions.
#'
#' @template arg_parset
#' @param par.vals (`list()`) \cr
#'   List of parameter settings.
#' @param ids (`character()`) \cr
#'   `id`s of the param.vals to check. Default is `names(par.vals)`.
#' @param use.defaults (`logical()`) \cr
#'   Some requirements relay on default values of the `par.set`. Default is
#'   `TRUE`, which means that if the value is not present in `par.vals` the
#'   default value will be considered.
#' @return `logical(1)` \cr
#' @export
isRequiresOk = function(par.set, par.vals, ids = names(par.vals), use.defaults = TRUE) {
  assertClass(par.set, "ParamSet")
  assertList(par.vals, names = "named")
  if (is.numeric(ids)) {
    assertInteger(ids, lower = 1L, upper = length(par.vals), unique = TRUE)
  } else {
    assertSubset(ids, choices = names(par.vals))
  }
  assertFlag(use.defaults)
  if (use.defaults) {
    par.vals.env = insert(getDefaults(par.set), par.vals)
  } else {
    par.vals.env = par.vals
  }
  requireOks = vlapply(names(par.vals), function(par.name) {
    requiresOk(par.set$pars[[par.name]], par.vals.env)
  })
  if (any(!requireOks)) {
    # just constructing an informative error message
    # FIXME Maybe use paramValueToString
    par.names.failed = names(requireOks)[!requireOks]
    par.vals.failed = par.vals[par.names.failed]
    requires.failed = as.character(extractSubList(par.set$pars, "requires")[par.names.failed])
    stopf("The following parameter settings do not meet the requirements: %s",
      paste0(par.names.failed, "=", par.vals.failed, " needs ", requires.failed, collapse = ", "))
  }
  return(all(requireOks))
}