2010-10-21 97 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

相關問題