R(和高级函数)中的函数组合

时间:2011-02-07 07:08:01

标签: r haskell

R中是否有类似函数组合的内容?

我认为在haskell中它有点像“(。)”,在agda中它是环形运算符。

另外,我在R中找到有关高级函数式编程的信息。 我发现函数“Reduce”,“Map”,“Filter”......还有更多吗?有什么指针吗?

3 个答案:

答案 0 :(得分:17)

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

(请注意,这些功能是从左到右应用的。)

答案 1 :(得分:8)

你可以像这样制作合成功能:

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 :(得分:1)

purrr 库中现在有一个 compose 函数。默认情况下,合成是从右到左进行的,就像在Haskell中一样,但是可以使用.dir参数将其反转:

div