[R] chaining closure arguments on-the-fly

Marc Schwartz m@rc_@chw@rtz @end|ng |rom me@com
Sat Jun 20 13:50:38 CEST 2020


Hi Ben,

How about something like this:

f <- function(x, y = NULL) {

  if (is.null(y)) 
    y <- x

  x + y
}

> f(3, 4)
[1] 7

> f(3)
[1] 6

Regards,

Marc Schwartz


> On Jun 20, 2020, at 7:15 AM, Benjamin Tyner <btyner using gmail.com> wrote:
> 
> Greetings,
> 
> Occasionally, I desire to call a function with one argument set to equal to another. Here is a toy example:
> 
>    f <- function(x, y) {
> 
>        x + y
>    }
> 
>    f(x = 3, y = x) # Error in f(x = 3, y = x) : object 'x' not found
> 
> So far, the most concise way I found to accomplish this is:
> 
>    f(x = 3, y = local(sys.frame(1)$x)) # evaluates to 6
> 
> but I dislike this solution because local() creates a new environment. Surely there must be a better way?
> 
> Note: I'm not interested in solutions that require modifying or currying f.
> 
> Regards,
> Ben
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list