Tools for defensive programming, inspired by purrr mappers and based on rlang.
attempt is designed to handle the cases when something / someone attempts to do something it shouldn’t.
For example:
log("a")
(error)paste()
"good morning"
and iris
(message/warning)attempt provides several condition handlers, from try catch to simple message printing.
attempt only depends on rlang, and every function is design to be fast, making it easy to implement in other functions and packages.
From CRAN:
install.packages("attempt")
The dev version:
install.packages("attempt", repo = "https://colinfay.me/ran", type = "source")
{attempt} provides four families of functions :
Try catch functions are a family of functions which are used to deal with errors and warnings.
attempt
behaves like base::try
, except that it allows custom message printing.try_catch
is a wrapper around tryCatch
that has a consistent grammar and allows the use of mappers.try_catch_df
returns a tibble with the call, the error message if any, the warning message if any, and the value of the evaluated expression or “error”. The values will always be contained in a list-column.map_try_catch
and map_try_catch_df
allow to map on a list of arguments to be evaluated by the function in fun
.Adverbs take a function and return a modified function.
silently
transforms a function so that when you call this new function, it returns nothing unless there is an error or a warning.surely
transforms a function so that when you call this new function, it calls attempt()
.with_message
and with_warning
take a function, and add a warning or a message to it.if_none
, if_any
and if_all
test the elements of the list.if_then
perfoms a “if this then that”.if_else
is a wrapper around base::ifelse()
that works with mappers.Thanks to Romain for the name suggestion.
Questions and feedbacks welcome!
You want to contribute ? Open a PR :) If you encounter a bug or want to suggest an enhancement, please open an issue.