代码之家  ›  专栏  ›  技术社区  ›  RockScience

如何创建函数向量?

r
  •  16
  • RockScience  · 技术社区  · 15 年前

    我想使用两个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))  
    }
    

    我的问题是组成向量的所有函数都是相同的,即使它们是使用不同的 i 通过循环。似乎它们是使用

    有人知道吗?

    1 回复  |  直到 15 年前
        1
  •  13
  •   ars    15 年前

    使用 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
    >