2010-10-21 25 views
14

me gustaría crear un vector de funciones utilizando un dos agruments función 'func', por ejemplo ésta:¿Cómo crear un vector de funciones?

func = function(number, coefficient) { 
    return(coefficient*number) 
} 

aquí es cómo creo el vector de funciones:

vector_of_functions = NULL 
for (i in 1:4) { 
    vector_of_functions = c(vector_of_functions, 
          function(number) func(number=number, coefficient=i)) 
} 

Mi El problema es que todas las funciones que componen mi vector son las mismas, incluso si se han creado usando i diferente a través del ciclo. Parece que se evalúan utilizando el último valor de i (que es una variable global aquí).

¿Alguien tiene una idea?

Respuesta

12

Utilice un factory function con un closure sobre su argumento (que contendrá el valor de la variable de bucle):

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

jeje genial! Muchas gracias ars – RockScience

Cuestiones relacionadas