给出功能列表
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中实现吗?
答案 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")