[R] chaining closure arguments on-the-fly

Benjamin Tyner btyner @end|ng |rom gm@||@com
Sun Jun 21 17:37:27 CEST 2020


On 6/20/20 5:04 PM, Duncan Murdoch wrote:
> I think you effectively did that in your original post (all but 
> encapsulating the expression in a function), so yes, it's possible. 
> However, it's a really bad idea.  Why use non-standard evaluation when 
> standard evaluation is fine?  Standard evaluation follows some well 
> defined rules, and is easy to reason about.  NSE follows whatever 
> rules it wants, so it's really hard for users to follow.  For example, 
> assuming you had the g() you want, what would this give?
>
> z <- 3
> f(x = z, y = g(z))
>
> You can't possibly know that without knowing whether there's a local 
> variable in f named z that is created before y is evaluated.
>
> Duncan Murdoch
>
>
Very good point, and I agree it's best to use standard evaluation 
whenever possible. The role of g would essentially be to modify one or 
more elements of f's formals in-place. For example calling:

    f(x = 3, y = g(expr))

would be equivalent to calling a function fm:

    fm(x = 3)

where the body of fm is identical to that of f, but:

     > formals(fm)
    $x


    $y
    expr

though I expect g would be non-trivial to code up robustly.



More information about the R-help mailing list