These functions test variables for uniqueness.
expect_unique(
vars,
exclude = getOption("testdat.miss"),
flt = TRUE,
data = get_testdata()
)
expect_unique_across(
vars,
exclude = getOption("testdat.miss"),
flt = TRUE,
data = get_testdata()
)
expect_unique_combine(
vars,
exclude = getOption("testdat.miss"),
flt = TRUE,
data = get_testdata()
)
<tidy-select
> A set of columns to
test.
a vector of values to exclude from uniqueness check. The
testdat.miss option is used by default. To include all values,
set exclude = NULL
.
<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.
expect_unique()
tests a set of columns (vars
) and fails if the combined
columns do not uniquely identify each row.
expect_unique_across()
tests a set of columns (vars
) and fails if each
row does not have unique values in each column.
expect_unique_combine()
tests a set of columns (vars
) and fails if any
value appears more than once across all of them.
By default the uniqueness check excludes missing values (as specified by the
testdat.miss option). Setting exclude = NULL
will include all
values.
student_fruit_preferences <- data.frame(
student_id = c(1:5, NA, NA),
apple = c(1, 1, 1, 1, 99, NA, NA),
orange = c(2, 3, 2, 3, 99, NA, NA),
banana = c(3, 2, 3, 2, 99, NA, NA),
phone1 = c(123, 456, 789, 987, 654, NA, NA),
phone2 = c(345, 678, 987, 567, 000, NA, NA)
)
# Check that key is unique, excluding NAs by default
expect_unique(student_id, data = student_fruit_preferences)
# Check that key is unique, including NAs
try(expect_unique(student_id, exclude = NULL, data = student_fruit_preferences))
#> Error : `student_fruit_preferences` has 2 duplicate records on variable `student_id`.
#> Filter: None
# Check each fruit has unique preference number
try(
expect_unique_across(
c(apple, orange, banana),
data = student_fruit_preferences
)
)
#> Error : `student_fruit_preferences` has 1 records with duplicates across variables `apple, orange, banana`.
#> Filter: None
# Check each fruit has unique preference number, allowing multiple 99 (item
# skipped) codes
expect_unique_across(
c(apple, orange, banana),
exclude = c(99, NA), data = student_fruit_preferences
)
# Check that each phone number appears at most once
try(expect_unique_combine(c(phone1, phone2), data = student_fruit_preferences))
#> Error : `student_fruit_preferences` has 2 records with duplicate values across variables `phone1, phone2`.
#> Filter: None