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)Customizing Error Messages
# 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
Create your own assertion functionsHave 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.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4