Adverbs

Colin Fay

2020-05-03

Adverbs

Adverbs take a function and return a modified function.

silently()

silently() transforms a function so that when you call this new function, it returns nothing unless there is an error or a warning (contrary to attempt that returns the result). In a sense, the new function stay silent unless error or warning.

silent_log <- silently(log)
silent_log(1)
silent_log("a")
# Error in .f(...) : non-numeric argument to mathematical function

With silently(), the result is never returned.

silent_matrix <- silently(matrix)
silent_matrix(1:3, 2)
#Warning message:
#In .f(...) :
#  data length [3] is not a sub-multiple or multiple of the number of rows [2]

surely()

surely() transforms a function so that when you call this new function, it calls attempt() - i.e. in the code below, calling sure_log(1) is the same as calling attempt(log(1)). In a sense, you’re sure this new function will always work.

sure_log <- surely(log)
sure_log(1)
# [1] 0
sure_log("a")
# Error: non-numeric argument to mathematical function

with_message() and with_warning()

These two functions take a function, and add a warning or a message to it.

as_num_msg <- with_message(as.numeric, msg = "We're performing a numeric conversion")
as_num_warn <- with_warning(as.numeric, msg = "We're performing a numeric conversion")
as_num_msg("1")
as_num_warn("1")

without_message(), without_warning(), and discretly()

These three functions do the opposite, as they remove warnings and messages:

matrix(1:3, ncol = 2)
no_warning_matrix <- without_warning(matrix)
no_warning_matrix(1:3, ncol = 2)