[Rd] substitute() on arguments in ellipsis ("dot dot dot")?

Duncan Murdoch murdoch@dunc@n @ending from gm@il@com
Sun Aug 12 22:16:07 CEST 2018


On 12/08/2018 4:00 PM, Henrik Bengtsson wrote:
> Hi. For any number of *known* arguments, we can do:
> 
> one <- function(a) list(a = substitute(a))
> two <- function(a, b) list(a = substitute(a), b = substitute(b))
> 
> and so on. But how do I achieve the same when I have:
> 
> dots <- function(...) list(???)
> 
> I want to implement this such that I can do:
> 
>> exprs <- dots(1+2)
>> str(exprs)
> List of 1
>   $ : language 1 + 2
> 
> as well as:
> 
>> exprs <- dots(1+2, "a", rnorm(3))
>> str(exprs)
> List of 3
>   $ : language 1 + 2
>   $ : chr "a"
>   $ : language rnorm(3)
> 
> Is this possible to achieve using plain R code?

I think so.  substitute(list(...)) gives you a single expression 
containing a call to list() with the unevaluated arguments; you can 
convert that to what you want using something like

dots <- function (...) {
   exprs <- substitute(list(...))
   as.list(exprs[-1])
}

Duncan Murdoch



More information about the R-devel mailing list