
Simple assertions with sensible defaults and customisable error messages.
The goals with assertions are to provide
Convenient assertion calls
(e.g. assert_number())
A general assert function that asserts any possible
condition/s and throws informative error messages
Extremely user friendly error message defaults.
Easily customisable error messages, with inline code evaluation
& styling powered by the cli package
Simple creation of custom assertion functions with user-specified defaults
install.packages("assertions")To get a bug fix or to use a feature from the development version, you can install the development version of assertions from GitHub.
# install.packages('remotes')
remotes::install_github('selkamand/assertions')All assertions start with assert, which means you just
type it in and levarage autocomplete suggestions to look through all
available options
# Load library
library(assertions)
# Use premade assertions
assert_character(c('a', 'b', 'c'))
assert_number(2)
assert_flag(TRUE)
# Assert anything
assert(1000 % 2 == 0)
# Assert multiple conditions at once (all must be true)
assert(1000 % 2 == 0, 6/2 == 3)# Customise any error messages using the `msg` argument
assert_number("A", msg = "Please supply a number!")
# Evaluate code in your error message using '{}' operators
foo = "A"
assert_number(foo, msg = "'{foo}' is not a number :(. Try again")
# Emphasise cetain words in error using {.strong text_to_emphasise}
assert_number("A", msg = "{.strong Try again}")For advanced customisation, see cli documentation
Have a custom assertion you want to use repeatedly?
Creating your own assertion functions is extremely easy
Just use assert_create(), you just need to supply:
a function that returns TRUE/FALSE when assertion should PASS/FAIL
a default error message
How about an example?
# Create a function that asserts input is lowercase
assert_lowercase <- assert_create(
func = function(x) {x == tolower(x)},
default_error_msg = "'{arg_name}' must be entirely lowercase"
)
#Assertion passes if input is lowercase
assert_lowercase("all lower case")
#But throws the expected error if uppercase characters are present
assert_lowercase("NOT all lower case") See ?assert_create() for details
Assertions may have vectorised versions that test whether all elements in a vector/matrix meet a condition.
For example:
assert_greater_than() expects a single number as an
input
assert_all_greater_than() works on
vectors/matrices.
Vectorised functions have the assert_all_ prefix.
Two options
Create a custom assert_something function with a
call to assert_create() or
assert_create_chain()
Create a github issue with the assertion creation code + any
helper function you pass to the func argument
(e.g. is_something())
Great alternative packages for writing assertions include:
Each package has its own features and syntax. So hopefully there is
one that suits your needs and preferences. I’m a big fan of
checkmate for its speed, assertive for its
huge library of ready-made assertion functions, and
assertthat for its error message customization.