From jeroenoom@ @ending from gm@il@com  Sun Aug 12 22:46:09 2018
From: jeroenoom@ @ending from gm@il@com (Jeroen Ooms)
Date: Sun, 12 Aug 2018 22:46:09 +0200
Subject: [Rd] substitute() on arguments in ellipsis ("dot dot dot")?
In-Reply-To: <CAFDcVCQppvvnXSgnO0CeG8Hpr7JWxFUMTnO7ORjK2JkUFKKWAw@mail.gmail.com>
References: <CAFDcVCQppvvnXSgnO0CeG8Hpr7JWxFUMTnO7ORjK2JkUFKKWAw@mail.gmail.com>
Message-ID: <CABFfbXt+XtK82Pz9NN6_2R8W4A72LgQ1NkF27rZxdBUOYEwYSw@mail.gmail.com>

On Sun, Aug 12, 2018 at 10:00 PM, Henrik Bengtsson
<henrik.bengtsson at gmail.com> 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?

You could use match.call, for example:

  dots <- function(...) match.call(expand.dots = FALSE)[['...']]

Note that this returns a pairlist, so if you want an ordinary list you
should wrap it in as.list()



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