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:
The dev version:
{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.stop_if, warn_if and message_if are easy to use functions that send an error, a warning or a message if a condition is met._if_not, and _if_all, _if_any and _if_none.Mappers are functions built like one sided formulas.
In other words, ~ .x + 2 is the equivalent of function(x) return(x + 2).
The first argument in a mapper need to be .x.
Questions and feedback welcome!
You want to contribute ? Open a PR :) If you encounter a bug or want to suggest an enhancement, please open an issue.