减少逐点函数加法

时间:2019-02-06 13:50:41

标签: r functional-programming purrr

我必须逐点添加一些功能(用于家庭作业),我可以手动执行此操作,但是作为函数式编程的忠实粉丝,我想得分一些样式点。 Stacksize和最大递归深度破坏了乐趣。

有人对如何更有效地实施此建议吗? (还是我在其他地方犯了错误?)

require(purrr)

A <- function(x) x+2
B <- function(y) y^2
C <- function(z) z*3

add_funs <- function(...){
  reduce(list(...), function(a,b){
    function(x){
      a(x)+b(x)
    }
  })
}

test <- add_funs(A,B,C)
test(2)

# Error: evaluation nested too deeply: infinite recursion / options(expressions=)?
# Error during wrapup: evaluation nested too deeply: infinite recursion / options(expressions=)?

test2 <- add_funs(A,B)
test2(2)

# Error: C stack usage  7969380 is too close to the limit

1 个答案:

答案 0 :(得分:0)

这是一个解决方案,它仅创建具有一个功能评估级别的堆栈,我现在应该真正开始实际工作。

add_funs_2 <- function(...){
  function(x){
    reduce(map(list(...), function(a){a(x)}), `+`)
  }
}

test3 <- add_funs_2(A,B,C)
test3(2)
# 14