Эту проблему можно решить с помощью конструкции eval-parse, хотя я настоятельно советую вам не использовать эту конструкцию. Это часто вызывает больше проблем, чем что-либо еще. Но я не мог найти приличный способ сделать это.
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,")"))))
}
Причина, как объяснил Аарон: все в определении функции принимается как есть до оценки функции.
Небольшое замечание: это особенно список функций , а не вектор. Невозможно иметь вектор типа «функция». Это также абсолютно бесполезно, так как вы должны выбрать функцию, используя индекс [[]], прежде чем сможете ее использовать. Тогда я бы просто добавил аргумент вместо определения функции для каждого возможного значения одного из аргументов.
То, чего вы хотите достичь, неясно, но если вы хотите применить func с разными коэффициентами, я удивляюсь, почему вы просто не делаете:
> 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
Вариация на тему Марека (избегая разбора):
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))))
}
1L и т. Д., Которые вы получаете, просто указывают, что они являются точными целыми числами (которые занимают меньше места в памяти).