Lambda
Lambda contains only one function f(), which allows you to write new functions in a very compact format.
Simply write the body of the function as you would normally. If you want a given variable to appear as one of the arguments to the function, surround it with .(). Default arguments can be also be specified within .() as you normally would in the argument list.
library(lambda)
function(x, y) x + y
#> function(x, y) x + y
f(.(x) + .(y))
#> function (x, y)
#> x + y
Reduce(f(.(x) + .(y)), 1:10)
#> [1] 55
add <- f(.(x) + .(y = 5))
add
#> function (x, y = 5)
#> x + y
add(1)
#> [1] 6
add(1, 2)
#> [1] 3It works very well as a way to compactly define simple utility functions
x <- list(1, list(NULL), 2)
compact <- f(Filter(Negate(is.null), .(x)))
compact
#> function (x)
#> Filter(Negate(is.null), x)
compact(x)
#> [[1]]
#> [1] 1
#>
#> [[2]]
#> [[2]][[1]]
#> NULL
#>
#>
#> [[3]]
#> [1] 2Or for partial function application
f1 <- f(runif(n = rpois(1, 5), .(...)))
f1
#> function (...)
#> runif(n = rpois(1, 5), ...)References
For a different (better?) approach to this same idea, see pryr::f().