1) gsubfn :: fn Пакет gsubfn поддерживает формулу для определения функций и, в отличие от purrr, упомянутого в вопросе, работает только с функциями purrr, с которыми он работает толькоо любой функции.
Если анонимная функция передается другой функции, в примере анонимная функция передается sapply
, затем предисловие sapply
с fn$
и использование формульной записи формы args ~ body.Если аргументы отсутствуют, предполагается, что свободные переменные в теле являются аргументами в том порядке, в котором они встречаются в теле, поэтому в первом примере ниже z
предполагается в качестве единственного аргумента.
library(gsubfn)
x <- 1:3
fn$sapply(x, ~ z)
## [1] 1 2 3
# same - specify arg
fn$sapply(x, z ~ z)
## [1] 1 2 3
# same - can use any variable name we like
fn$sapply(x, ~ x)
## [1] 1 2 3
# same
sapply(x, function(z) z)
## [1] 1 2 3
Анонимные функции могут иметь любое количество аргументов.Следующие элементы одинаковы:
fn$sapply(x, ~ u + 2 * v, v = 10)
## [1] 21 22 23
# same
fn$sapply(x, u + v ~ u + 2 * v, v = 10)
## [1] 21 22 23
# same
sapply(x, function(u, v) u + 2 * v, v = 10)
## [1] 21 22 23
2) magrittr
Пакет magrittr поддерживает конвейерную нотацию для определения функций с одним аргументом.Аргумент должен быть точкой.
library(magrittr)
x <- 1:3
sapply(x, . %>% {.})
## [1] 1 2 3
# same
sapply(x, function(x) x)
## [1] 1 2 3
# same
x %>% sapply(. %>% {.})
## [1] 1 2 3
3) lambda.r Пакет lambda.r позволяет определять именованные функции, используя%as%
.Здесь мы определяем функцию с именем fun
.
library(lambda.r)
x <- 1:3
fun(x) %as% x
sapply(x, fun)
## [1] 1 2 3
# same
fun <- function(x) x
sapply(x, fun)
## [1] 1 2 3