questo può essere risolto utilizzando un costrutto eval-parse, anche se io consiglio vivamente di non di utilizzare questo costrutto. Spesso provoca più problemi di ogni altra cosa. Ma non sono riuscito a ottenere un modo decente per farlo.
vector_of_functions = NULL
for (i in 1:4) {
vector_of_functions = c(vector_of_functions,
eval(parse(text=paste("function(number) func(number=number, coefficient=",i,")"))))
}
La ragione è, come spiegato Aaron: tutto all'interno della definizione di funzione viene preso come è fino a che la valutazione della funzione.
Piccolo commento: questo è soprattutto un elenco di funzioni e non un vettore. È impossibile avere un vettore di tipo "funzione". È anche assolutamente inutile, poiché devi selezionare la funzione usando l'indice [[]] prima di poterlo usare. Quindi aggiungerei l'argomento invece di definire una funzione per ogni possibile valore di uno degli argomenti.
Quindi, ciò che si vuole raggiungere è chiaro, ma se si desidera applicare func con diversi coefficienti, mi chiedo perché non lo fai semplicemente fare:
> x <- c(10,20,30)
> sapply(1:4,function(y)func(number=x,coefficient=y))
[,1] [,2] [,3] [,4]
[1,] 10 20 30 40
[2,] 20 40 60 80
[3,] 30 60 90 120
Una variazione sul tema di Marek (evitando il parsing):
vector_of_functions = NULL
for (i in 1:4) {
vector_of_functions = c(vector_of_functions,
eval(substitute(function(number) func(number=number, coefficient=i),list(i=i))))
}
il 1L ecc si ottiene, basta indicare sono interi esatte (che occupano meno spazio di memoria).
Continuo qui come sono un nuovo utente e il forum blocca la mia domanda se contiene troppe righe di codice apparentemente .... – RockScience
Quante linee di codice hai? Aggiungi che è importante per noi rispondere. –
Ho 11 righe di codice ... – RockScience