These test the proportion of data in a data frame satisfying some condition.
The generic functions, expect_prop_lte()
and expect_prop_gte()
, can be
used with any arbitrary function. The chk_*()
functions, like
chk_values()
, are useful in this regard.
expect_prop_lte(
var,
func,
prop,
flt = TRUE,
data = get_testdata(),
args = list(),
func_desc = NULL
)
expect_prop_gte(
var,
func,
prop,
flt = TRUE,
data = get_testdata(),
args = list(),
func_desc = NULL
)
expect_prop_nmiss(
var,
prop,
miss = getOption("testdat.miss"),
flt = TRUE,
data = get_testdata()
)
expect_prop_values(var, prop, ..., flt = TRUE, data = get_testdata())
An unquoted column name to test.
A function to use for testing that takes a vector as the first argument and returns a logical vector of the same length showing whether an element passed or failed.
The proportion of the data frame expected to satisfy the condition.
<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.
A named list of arguments to pass to func
.
A human friendly description of func
to use in the
expectation failure message.
A vector of values to be treated as missing. The testdat.miss option is used by default.
Vectors of valid values.
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.
Given the use of quasi-quotation within these functions, to make a new
functions using one of the generics such as expect_prop_gte()
one must
defuse the var
argument using the embracing operator {{ }}
. See the
examples sections for an example.
chk_*()
functions such as chk_values()
Other data expectations:
conditional-expectations
,
datacomp-expectations
,
date-expectations
,
exclusivity-expectations
,
expect_depends()
,
generic-expectations
,
label-expectations
,
pattern-expectations
,
text-expectations
,
uniqueness-expectations
,
value-expectations
sales <- data.frame(
sale_id = 1:5,
date = c("20200101", "20200101", "20200102", "20200103", "2020003"),
sale_price = c(10, 20, 30, 40, -1),
book_title = c(
"Phenomenology of Spirit",
NA,
"Critique of Practical Reason",
"Spirit of Trust",
"Empiricism and the Philosophy of Mind"
),
stringsAsFactors = FALSE
)
# Create a custom expectation
expect_prop_length <- function(var, len, prop, data) {
expect_prop_gte(
var = {{var}}, # Notice the use of the embracing operator
func = chk_max_length,
prop = prop,
data = data,
args = list(len = len),
func_desc = "length_check"
)
}
# Use it to check that dates are mostly <= 8 char wide
expect_prop_length(date, 8, 0.9, sales)
# Check price values mostly between 0 and 100
try(expect_prop_values(sale_price, 0.9, 1:100, data = sales))
#> Error : `data` has 4 records (0.8 of total) satisfying value check on variable `var`
#> Filter: `flt`
#> Arguments: `<int: 1L, 2L, 3L, 4L, 5L, ...>`