16

2つの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私の問題は、ループを介して異なるものを使用して作成された場合でも、ベクトルを構成するすべての関数が同じであるということです。i(ここではグローバル変数です)の最後の値を使用して評価されることがわかります。

誰かアイデアがありますか?

4

1 に答える 1

13

引数を閉じたファクトリ関数を使用します(ループ変数の値を保持します)。

> # 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
> 
于 2010-10-21T09:22:36.303 に答える