Function Composition in R (and high level functions)

后端 未结 3 948
执笔经年
执笔经年 2021-02-19 01:28

Is there something like a function composition in R?

I think in haskell it\'s somthing like \"(.)\" and in agda it\'s the ring operator.

Also, I find litte infor

相关标签:
3条回答
  • 2021-02-19 02:00

    There is now a compose function in the purrr library. By default composition is made from right to left, as in Haskell, but it can be reversed with the .dir param:

    library(purrr)
    f = function(x) x+1
    g = function(x) x*3
    
    > compose(g,f)(1)
    [1] 6
    > compose(f,g, .dir="forward")(1)
    [1] 6
    
    0 讨论(0)
  • 2021-02-19 02:06

    You may make compositing function like this:

    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)
    

    or make operator of this.

    About the second point, there are lots of such; I think the most used are the *apply family (sapply, mapply, tapply, lapply, apply...).

    0 讨论(0)
  • 2021-02-19 02:08

    The functional package has a Compose functional which generalizes to any number of functions:

    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
    

    (Note that the functions are applied from left to right.)

    0 讨论(0)
提交回复
热议问题