Check if a parameter value satisfies the constraints of the
parameter description. This includes the requires
expressions and the
forbidden
expression, if par
is a ParamSet()
. If requires
is not
satisfied, the parameter value must be set to scalar NA
to be still
feasible, a single scalar even in a case of a vector parameter. If the result
is FALSE
the attribute "warning"
is attached which gives the reason for
the negative result.
If the parameter has cnames
, these are also checked.
isFeasible(par, x, use.defaults = FALSE, filter = FALSE)
(any)
Single value to check against the Param
or ParamSet
. For a ParamSet
x
must be a list. x
has to contain the untransformed values. If the
list is named, it is possible to only pass a subset of parameters defined
in the ParamSet()
par
. In that case, only conditions regarding the
passed parameters are checked. (Note that this might not work if one of the
passed params has a requires
setting which refers to an unpassed param.)
(logical(1)
)
Whether defaults of the Param()
/ParamSet()
should be used if no values
are supplied. If the defaults have requirements that are not met by x
it
will be feasible nonetheless. Default is FALSE
.
(logical(1)
)
Whether the ParamSet()
should be reduced to the space of the given Param
Values. Note that in case of use.defaults = TRUE
the filtering will be
conducted after the insertion of the default values. Default is FALSE
.
logical(1)
.
p = makeNumericParam("x", lower = -1, upper = 1)
isFeasible(p, 0) # True
#> [1] TRUE
isFeasible(p, 2) # False, out of bounds
#> [1] FALSE
isFeasible(p, "a") # False, wrong type
#> [1] FALSE
# now for parameter sets
ps = makeParamSet(
makeNumericParam("x", lower = -1, upper = 1),
makeDiscreteParam("y", values = c("a", "b"))
)
isFeasible(ps, list(0, "a")) # True
#> [1] TRUE
isFeasible(ps, list("a", 0)) # False, wrong order
#> [1] FALSE
#> attr(,"warning")
#> [1] "The parameter setting x=a does not meet constraints"