Checks if there is a one to one mapping between two lists of variables.
Usage
assert_one_to_one(
dataset,
vars1,
vars2,
dataset_name = rlang::caller_arg(dataset),
message = NULL,
class = "assert_one_to_one",
call = parent.frame()
)
Arguments
- dataset
Dataset to be checked
The variables specified for
vars1
andvars2
are expected.- vars1
First list of variables
- vars2
Second list of variables
- dataset_name
string indicating the label/symbol of the object being checked. Default is
rlang::caller_arg(dataset)
.- message
string passed to
cli::cli_abort(message)
. WhenNULL
, default messaging is used (see examples for default messages)."dataset_name"
can be used in messaging.- 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
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.
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_filter_cond()
,
assert_function()
,
assert_integer_scalar()
,
assert_list_element()
,
assert_list_of()
,
assert_logical_scalar()
,
assert_named()
,
assert_numeric_vector()
,
assert_param_does_not_exist()
,
assert_s3_class()
,
assert_same_type()
,
assert_symbol()
,
assert_unit()
,
assert_vars()
,
assert_varval_list()
Examples
library(dplyr)
library(rlang)
df <- tribble(
~SPECIES, ~SPECIESN,
"DOG", 1L,
"CAT", 2L,
"DOG", 1L
)
assert_one_to_one(df, vars1 = exprs(SPECIES), vars2 = exprs(SPECIESN))
df_many <- tribble(
~SPECIES, ~SPECIESN,
"DOG", 1L,
"CAT", 2L,
"DOG", 3L
)
try(
assert_one_to_one(df_many, vars1 = exprs(SPECIES), vars2 = exprs(SPECIESN))
)
#> Error in eval(expr, envir, enclos) :
#> For some values of "SPECIES" there is more than one value of "SPECIESN"
#> ℹ Call `admiral::get_one_to_many_dataset()` to get all one-to-many values.
try(
assert_one_to_one(df_many, vars1 = exprs(SPECIESN), vars2 = exprs(SPECIES))
)
#> Error in eval(expr, envir, enclos) :
#> There is more than one value of "SPECIESN" for some values of "SPECIES"
#> ℹ Call `admiral::get_many_to_one_dataset()` to get all many-to-one values.