Is an Argument a Filter Condition?
Usage
assert_filter_cond(
arg,
optional = FALSE,
arg_name = gsub("^enexpr\\((.*)\\)$", "\\1", rlang::caller_arg(arg)),
message = NULL,
class = "assert_filter_cond",
call = parent.frame()
)Arguments
- arg
Quosure - filtering condition.
- Default value
none
- optional
Logical - is the argument optional?
- Default value
FALSE
- arg_name
By default the expression specified for
argis used. If it is of the formenexpr(<argument name>), theenexpr()part is removed. For example ifarg = enexpr(filter_add)is specified,arg_namedefaults to"filter_add"- Default value
gsub("^enexpr\((.*)\)$", "\1", rlang::caller_arg(arg))
- message
string passed to
cli::cli_abort(message). WhenNULL, default messaging is used (see examples for default messages)."{arg_name}"can be used in messaging.- Default value
NULL
- class
Subclass of the condition.
- call
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
callwhen throwing a condition from a helper function which wouldn't be relevant to mention in the message.Can also be
NULLor 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.
Details
Check if arg is a suitable filtering condition to be used in
functions like subset or dplyr::filter.
See also
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()
Examples
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
