我必须逐点添加一些功能(用于家庭作业),我可以手动执行此操作,但是作为函数式编程的忠实粉丝,我想得分一些样式点。 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
答案 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