I would like to create a vector of functions using a two agruments function 'func', for instance this one:
func = function(number, coefficient) {
return(coefficient*number)
}
here is how I create the vector of functions:
vector_of_functions = NULL
for (i in 1:4) {
vector_of_functions = c(vector_of_functions,
function(number) func(number=number, coefficient=i))
}
My issue is that all functions that compose my vector are the same, even if they have been created using different i
through the loop. It seams that they are evaluated using the last value of i
(which is a global variable here).
Does anybody have an idea?
Use a factory function with a closure over its argument (which will hold the value of the looping variable):
> # 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
>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With