partial {pryr} | R Documentation |
Partial apply a function, filling in some arguments.
Description
Partial function application allows you to modify a function by pre-filling some of the arguments. It is particularly useful in conjunction with functionals and other function operators.
Usage
partial(`_f`, ..., .env = parent.frame(), .lazy = TRUE)
Arguments
_f |
a function. For the output source to read well, this should be an
be a named function. This argument has the weird (non-syntactic) name
|
... |
named arguments to |
.env |
the environment of the created function. Defaults to
|
.lazy |
If |
Design choices
There are many ways to implement partial function application in R.
(see e.g. dots
in https://github.com/crowding/vadr for another
approach.) This implementation is based on creating functions that are as
similar as possible to the anonymous function that'd you'd create by hand,
if you weren't using partial
.
Examples
# Partial is designed to replace the use of anonymous functions for
# filling in function arguments. Instead of:
compact1 <- function(x) Filter(Negate(is.null), x)
# we can write:
compact2 <- partial(Filter, Negate(is.null))
# and the generated source code is very similar to what we made by hand
compact1
compact2
# Note that the evaluation occurs "lazily" so that arguments will be
# repeatedly evaluated
f <- partial(runif, n = rpois(1, 5))
f
f()
f()
# You can override this by saying .lazy = FALSE
f <- partial(runif, n = rpois(1, 5), .lazy = FALSE)
f
f()
f()
# This also means that partial works fine with functions that do
# non-standard evaluation
my_long_variable <- 1:10
plot2 <- partial(plot, my_long_variable)
plot2()
plot2(runif(10), type = "l")