Capture side effects.
These functions wrap functions so that instead of generating side effects through printed output, messages, warnings, and errors, they return enhanced output. They are all adverbs because they modify the action of a verb (a function).
safely(.f, otherwise = NULL, quiet = TRUE) quietly(.f) possibly(.f, otherwise, quiet = TRUE) auto_browse(.f)
.f |
A function, formula, or vector (not necessarily atomic). If a function, it is used as is. If a formula, e.g.
This syntax allows you to create very compact anonymous functions. If character vector, numeric vector, or list, it is
converted to an extractor function. Character vectors index by
name and numeric vectors index by position; use a list to index
by position and name at different levels. If a component is not
present, the value of |
otherwise |
Default value to use when an error occurs. |
quiet |
Hide errors ( |
If you would like to include a function created with safely
, slowly
, or
insistently
in a package, see faq-adverbs-export.
safely
: wrapped function instead returns a list with
components result
and error
. If an error occurred, error
is
an error
object and result
has a default value (otherwise
).
Else error
is NULL
.
quietly
: wrapped function instead returns a list with components
result
, output
, messages
and warnings
.
possibly
: wrapped function uses a default value (otherwise
)
whenever an error occurs.
safe_log <- safely(log) safe_log(10) safe_log("a") list("a", 10, 100) %>% map(safe_log) %>% transpose() # This is a bit easier to work with if you supply a default value # of the same type and use the simplify argument to transpose(): safe_log <- safely(log, otherwise = NA_real_) list("a", 10, 100) %>% map(safe_log) %>% transpose() %>% simplify_all() # To replace errors with a default value, use possibly(). list("a", 10, 100) %>% map_dbl(possibly(log, NA_real_)) # For interactive usage, auto_browse() is useful because it automatically # starts a browser() in the right place. f <- function(x) { y <- 20 if (x > 5) { stop("!") } else { x } } if (interactive()) { map(1:6, auto_browse(f)) } # It doesn't make sense to use auto_browse with primitive functions, # because they are implemented in C so there's no useful environment # for you to interact with.
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.