expect_exclusive tests that
vars are exclusive - that, if any one of
vars is set to
exc_val, no other column in
var_set is also
expect_exclusive(vars, var_set, exc_val = 1, flt = TRUE, data = get_testdata())
tidy-select> A set of columns to
tidy-select> The full set of
columns to check against. This should include all columns specified in the
The value that flags a variable as "selected" (default:
data-masking> A filter specifying
a subset of the data frame to test.
A data frame to test. The global test data is used by default.
expect_*() functions are mainly called for their side effects. The
expectation signals its result (e.g. "success", "failure"), which is logged
by the current test reporter. In a non-testing
context the expectation will raise an error with class
expectation_failure if it fails.
This expectation is designed to check exclusivity in survey multiple response sets, where one response is only valid on its own.
See the example data set below:
No record should have
q10_98, "None of the above", selected while also
having any other response selected, so we refer to this as an "exclusive"
expect_exclusive() checks whether
q10_98 "None of the above" or
q10_99 "Don't know", the exclusive responses, have been selected alongside
The expectation fails, since the first record has both
my_q_block <- data.frame( resp_id = 1:5, # Unique to respondent q10_1 = c(1, 1, 0, 0, 0), q10_2 = c(0, 1, 0, 0, 0), q10_3 = c(0, 0, 1, 0, 0), q10_98 = c(1, 0, 0, 1, 0), # None of the above q10_99 = c(0, 0, 0, 0, 1) # Item not answered ) # Make sure that if "None of the above" and "Item skipped" are selected # none of the other question options are selected: try( expect_exclusive( c(q10_98, q10_99), starts_with("q10_"), data = my_q_block ) ) #> Error : `my_q_block` has 1 records with non-exclusive values in variables `q10_98, q10_99` in variable set `starts_with("q10_")`. #> Filter: None