r语言 - 减少逐点函数添加堆栈大小



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

没有人对如何更有效地实施这一点有建议?(还是我在别的地方犯了错误?

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

这是一个解决方案,它只创建一个具有一级函数评估的堆栈,我现在真的应该开始做实际工作了。

add_funs_2 <- function(...){
  function(x){
    reduce(map(list(...), function(a){a(x)}), `+`)
  }
}
test3 <- add_funs_2(A,B,C)
test3(2)
# 14

最新更新