[R] Function in default parameter value closing over variables defined later in the enclosing function
Ivan Krylov
kry|ov@r00t @end|ng |rom gm@||@com
Wed Jan 23 10:53:01 CET 2019
Hi!
I needed to generalize a loss function being optimized inside another
function, so I made it a function argument with a default value. It
worked without problems, but later I noticed that the inner function,
despite being defined in the function arguments, somehow closes over a
variable belonging to the outer function, which is defined later.
Example:
outside <- function(inside = function() print(secret)) {
secret <- 'secret'
inside()
}
outside()
I'm used to languages that have both lambdas and variable declaration
(like perl5 -Mstrict or C++11), so I was a bit surprised.
Does this work because R looks up the variable by name late enough at
runtime for the `secret` variable to exist in the parent environment of
the `inside` function? Can I rely on it? Is this considered bad style?
Should I rewrite it (and how)?
--
Best regards,
Ivan
More information about the R-help
mailing list