[R] chaining closure arguments on-the-fly
Benjamin Tyner
btyner @end|ng |rom gm@||@com
Sun Jun 21 00:19:24 CEST 2020
On 6/20/20 5:49 PM, Bert Gunter wrote:
> Gents:
> (with trepidation)
>
> f(x = 3, y = g(expr))
> **already** evaluates g in the environment of f, **not** in the
> environment of the caller.
> (This does not contradict Duncan's example -- 3 is a constant, not a
> variable).
>
> e.g.
> > f <- function(x = 3, y = x^2 +k){
> + k <- 3
> + x + y
> + }
>
> Ergo
> > k <- 100; x <- 10
> > f()
> [1] 15
> > f(0)
> [1] 3
> > x
> [1] 10
>
> This is all due to lazy evaluation where default arguments are
> evaluated in the function's environment (using standard evaluation).
> Arguments supplied in the call are evaluated in the caller's
> environment, so:
>
> > f(x = x)
> [1] 113
>
> Am I missing something here?
>
> Cheers,
>
> Bert Gunter
>
> "The trouble with having an open mind is that people keep coming along
> and sticking things into it."
> -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )
>
Default arguments are indeed evaluated in f's environment, but not
supplied arguments. I haven't really thought about the semantics of 'g'
with respect to default arguments. But certainly, lazy evaluation is key
here.
Ben (with trepidation as well)
More information about the R-help
mailing list