2010-10-21 16 views
14

Vorrei creare un vettore di funzioni utilizzando un due agruments funzione 'func', per esempio questa:Come creare un vettore di funzioni?

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

ecco come creo il vettore delle funzioni:

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

mio problema è che tutte le funzioni che compongono il mio vettore sono gli stessi, anche se sono stati creati utilizzando diversi i attraverso il ciclo. E cuciture che sono valutate utilizzando l'ultimo valore di i (che è una variabile globale qui).

Qualcuno ha un'idea?

risposta

12

Utilizzare un factory function con un closure sopra il suo argomento (che conterrà il valore della variabile looping):

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

hehe grande! Grazie mille ars – RockScience

Problemi correlati