Create a new function that is the composition of multiple functions,
i.e. compose(f, g)
is equivalent to function(...) f(g(...))
.
compose(..., .dir = c("backward", "forward"))
Functions to apply in order (from right to left by default). Formulas are converted to functions in the usual way.
Dynamic dots are supported. In particular, if
your functions are stored in a list, you can splice that in with
!!!
.
If "backward"
(the default), the functions are called
in the reverse order, from right to left, as is conventional in
mathematics. If "forward"
, they are called from left to right.
A function
This function is called an adverb because it modifies the effect of a function (a verb). If you'd like to include a function created an adverb in a package, be sure to read faq-adverbs-export.
Other adverbs:
auto_browse()
,
insistently()
,
negate()
,
partial()
,
possibly()
,
quietly()
,
safely()
,
slowly()
not_null <- compose(`!`, is.null)
not_null(4)
#> [1] TRUE
not_null(NULL)
#> [1] FALSE
add1 <- function(x) x + 1
compose(add1, add1)(8)
#> [1] 10
fn <- compose(\(x) paste(x, "foo"), \(x) paste(x, "bar"))
fn("input")
#> [1] "input bar foo"
# Lists of functions can be spliced with !!!
fns <- list(
function(x) paste(x, "foo"),
\(x) paste(x, "bar")
)
fn <- compose(!!!fns)
fn("input")
#> [1] "input bar foo"