我想使用两个agruments函数'func'创建一个函数向量,例如这个:
func = function(number, coefficient) {
return(coefficient*number)
}
这是我如何创建函数向量:
vector_of_functions = NULL
for (i in 1:4) {
vector_of_functions = c(vector_of_functions,
function(number) func(number=number, coefficient=i))
}
我的问题是组成我的vector的所有函数都是相同的,即使它们是通过循环使用不同的i
创建的。接缝是使用i
的最后一个值(这里是一个全局变量)来评估它们。
有人有想法吗?
答案 0 :(得分:13)
使用factory function,其closure超过其参数(将保存循环变量的值):
> # the factory function
> makefunc <- function(x) { x; function() x }
> funclist <- list()
> for (i in 1:3) funclist[[i]] <- makefunc(i)
> funclist[[1]]()
[1] 1
> funclist[[2]]()
[1] 2
>