`as_function()`

transform objects to functions. It fetches
functions by name if supplied a string or transforms
quosures to a proper function.

`as_closure()`

first passes its argument to `as_function()`

. If
the result is a primitive function, it regularises it to a proper
closure (see `is_function()`

about primitive functions).

as_function(x, env = caller_env())
as_closure(x, env = caller_env())

## Arguments

x |
A function or formula.
If a **function**, it is used as is.
If a **formula**, e.g. `~ .x + 2` , it is converted to a function
with two arguments, `.x` or `.` and `.y` . This allows you to
create very compact anonymous functions with up to two inputs. |

env |
Environment in which to fetch the function in case `x`
is a string. |

## Examples

f <- as_function(~ . + 1)
f(10)

#> [1] 11

# Primitive functions are regularised as closures
as_closure(list)

#> function (...)
#> list(...)
#> <environment: base>

as_closure("list")

#> function (...)
#> list(...)
#> <environment: base>

# Operators have `.x` and `.y` as arguments, just like lambda
# functions created with the formula syntax:
as_closure(`+`)

#> function(.x, .y) if (missing(.y)) .x else .x + .y
#> <environment: 0x7f979c7d8108>

as_closure(`~`)

#> function(.x, .y) {
#> if (is_missing(substitute(.y))) {
#> new_formula(NULL, substitute(.x), caller_env())
#> } else {
#> new_formula(substitute(.x), substitute(.y), caller_env())
#> }
#> }
#> <environment: 0x7f979ca7c278>