[R] chaining closure arguments on-the-fly

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Sun Jun 21 00:31:13 CEST 2020


OK -- you were referring explicitly to the function call. That's what I
missed. Apologies for the noise.

-- Bert

On Sat, Jun 20, 2020 at 3:19 PM Benjamin Tyner <btyner using gmail.com> wrote:

>
> 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)
>
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list