R:在函数内迭代定义函数

R: Iteratively Defining functions inside functions

给定函数列表

functions <- list(f1,f2)

我想迭代地重新定义此列表中的所有函数,以便得到

newFunctions <- list(function(...){f1(...) + 1},function(...){f2(...) + 1})

我试图通过

实现这一目标
newFunctions <- lapply(functions, function(i){
  return(function(...){
    return(i(...) + 1)
    }
}

但这会将 i 硬编码到函数中,而不是迭代器指向的函数中。

我发现 ,其中的解决方案是在定义函数之前评估迭代器。但是,我无法评估 i,因为我正在迭代函数

有什么方法可以在 R 中实现吗?

首先让我们通过删除显式 return 调用来修复语法错误:

newFunctions <- lapply(functions, function(x) function(...) x(...) + 1)

用法示例:

functions <- list(sin, cos, tan)
newFunctions <- lapply(functions, function(x) function(...) x(...) + 1)
identical(
  newFunctions[[1]](1), 
  sin(1) + 1
)
#[1] TRUE

代码创建闭包。 x取自关联环境:

newFunctions[[1]]
#function(...) x(...) + 1
#<environment: 0x000000001a812138>
environment(newFunctions[[1]])$x
#function (x)  .Primitive("sin")