【发布时间】:2023-04-09 05:03:01
【问题描述】:
给定一个函数列表
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 中实现这个?
【问题讨论】:
-
你的问题开始时我已经遇到了问题。您在那里显示的不是功能列表。它是这些函数的返回值的列表。
-
可能类似于
functions <- list(sin, cos, tan); lapply(functions, function(x) function(...) x(...) + 1)? -
@mtoller 名称
x是硬编码的,但newFunctions[[1]](x)和1 + sin(x)的结果是identical。 -
我的代码创建了闭包。
x = sin在函数的关联环境中定义。这是我看到的将任意函数列表作为输入的唯一方法。如果你有一个闭包列表或一个表达式列表,那么替代方案是可能的。 -
看看
e <- environment(newFunctions[[1]]); e$i返回什么。
标签: r function loops function-definition