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")
给定函数列表
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")