[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