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

时间:2018-11-27 11:31:53

标签: r function loops function-definition

给出功能列表

functions <- list(f1,f2)

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

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

我试图通过

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

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

我发现R: Defining functions within a loop的解决方案是在定义函数之前先评估迭代器。但是,由于我要遍历函数,因此无法评估i

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

1 个答案:

答案 0 :(得分:1)

首先让我们摆脱显式的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")