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())

## Arguments

var

An unquoted column name to test.

func

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.

prop

The proportion of the data frame expected to satisfy the condition.

flt

<data-masking> A filter specifying a subset of the data frame to test.

data

A data frame to test. The global test data is used by default.

args

A named list of arguments to pass to func.

func_desc

A human friendly description of func to use in the expectation failure message.

miss

A vector of values to be treated as missing. The testdat.miss option is used by default.

...

Vectors of valid values.

## Value

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.

## Details

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, generic-expectations, label-expectations, pattern-expectations, text-expectations, uniqueness-expectations, value-expectations

## Examples

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, ...>