Состав функции в R (и функции высокого уровня)
Есть ли что-то вроде композиции функций в R?
Я думаю, что haskell это somthing как "(.)" и в agda это оператор кольца.
Кроме того, я нахожу информацию о функциональном программировании на высоком уровне в R.
Я нашел функции "Уменьшить", "Карта", "Фильтр"..., есть ли еще? Любые указатели?
Ответы
Ответ 1
Вы можете сделать функцию компоновки следующим образом:
composite<-function(f,g) function(...) f(g(...))
f<-function(x) x+1;
g<-function(x) x*2;
composite(f,g)(7)
composite(g,f)(7)
или сделать оператор этого.
О втором пункте, их много; Я думаю, что наиболее используемыми являются семейство * apply (sapply, mapply, tapply, lapply, apply...).
Ответ 2
Пакет functional
имеет функтор Compose
, который обобщает на любое количество функций:
set.seed(123)
x <- matrix(runif(100), 10, 10)
mean(rowSums(scale(x)))
# [1] 5.486063e-18
library(functional)
Compose(scale, rowSums, mean)(x)
# [1] 5.486063e-18
(Обратите внимание, что функции применяются слева направо.)