Is an Argument a Filter Condition?
assert_filter_cond(
arg,
optional = FALSE,
arg_name = gsub("^enexpr\\((.*)\\)$", "\\1", rlang::caller_arg(arg)),
message = NULL,
class = "assert_filter_cond",
call = parent.frame()
)
Quosure - filtering condition.
none
Logical - is the argument optional?
FALSE
By default the expression specified for arg
is used. If it is
of the form enexpr(<argument name>)
, the enexpr()
part is removed. For example
if arg = enexpr(filter_add)
is specified, arg_name
defaults to "filter_add"
gsub("^enexpr\((.*)\)$", "\1", rlang::caller_arg(arg))
string passed to cli::cli_abort(message)
.
When NULL
, default messaging is used (see examples for default messages).
"{arg_name}"
can be used in messaging.
NULL
Subclass of the condition.
The execution environment of a currently running
function, e.g. call = caller_env()
. The corresponding function
call is retrieved and mentioned in error messages as the source
of the error.
You only need to supply call
when throwing a condition from a
helper function which wouldn't be relevant to mention in the
message.
Can also be NULL
or a defused function call to
respectively not display any call or hard-code a code to display.
For more information about error calls, see Including function calls in error messages.
Performs necessary checks and returns arg
if all pass.
Otherwise throws an informative error.
Check if arg
is a suitable filtering condition to be used in
functions like subset
or dplyr::filter
.
Checks for valid input and returns warning or errors messages:
assert_atomic_vector()
,
assert_character_scalar()
,
assert_character_vector()
,
assert_data_frame()
,
assert_date_vector()
,
assert_expr()
,
assert_expr_list()
,
assert_function()
,
assert_integer_scalar()
,
assert_list_element()
,
assert_list_of()
,
assert_logical_scalar()
,
assert_named()
,
assert_numeric_vector()
,
assert_one_to_one()
,
assert_param_does_not_exist()
,
assert_s3_class()
,
assert_same_type()
,
assert_symbol()
,
assert_unit()
,
assert_vars()
,
assert_varval_list()
library(dplyr, warn.conflicts = FALSE)
library(rlang)
dm <- dplyr::tribble(
~DOMAIN, ~STUDYID, ~USUBJID, ~AGE,
"DM", "STUDY X", "01-701-1015", 64,
"DM", "STUDY X", "01-701-1016", 65,
)
# typical usage in a function as an argument check
example_fun <- function(dat, x) {
x <- assert_filter_cond(enexpr(x), arg_name = "x")
filter(dat, !!x)
}
example_fun(dm, AGE == 64)
#> # A tibble: 1 × 4
#> DOMAIN STUDYID USUBJID AGE
#> <chr> <chr> <chr> <dbl>
#> 1 DM STUDY X 01-701-1015 64
try(assert_filter_cond(mtcars))
#> Error in eval(expr, envir) :
#> Argument `mtcars` must be a filter condition, but is a data frame