Как создать вектор функций?

Я хотел бы создать вектор функций, используя две функции 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 (которое здесь является глобальной переменной).

Есть ли у кого-нибудь идеи?

Ответы

Ответ 1

Используйте factory функцию с 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
>