2010-10-21 96 views
14

我想创建的使用两个agruments功能“功能”功能的载体,比如这一个:如何创建一个函数向量?

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)) 
} 

我问题在于组成我的矢量的所有函数都是相同的,即使它们是通过循环使用不同的i创建的。它接近使用最后一个值i(这是一个全局变量)对它们进行评估。

有没有人有想法?

回答

12

使用factory functionclosure超过它的参数(其将持有的循环变量的值):

> # 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 
> 
+0

嘿嘿太好了!非常感谢 – RockScience

相关问题