From peter@meil@trup @ending from gm@il@com  Mon Aug 13 07:09:51 2018
From: peter@meil@trup @ending from gm@il@com (Peter Meilstrup)
Date: Sun, 12 Aug 2018 22:09:51 -0700
Subject: [Rd] substitute() on arguments in ellipsis ("dot dot dot")?
In-Reply-To: <601ad637-43cd-63e7-81b7-7b350bff5624@gmail.com>
References: <CAFDcVCQppvvnXSgnO0CeG8Hpr7JWxFUMTnO7ORjK2JkUFKKWAw@mail.gmail.com>
 <601ad637-43cd-63e7-81b7-7b350bff5624@gmail.com>
Message-ID: <CAJoaRhZDpA4PaaBRdoTCmpNSD4kjaN7+OVKwycW5Fue72R0-Pg@mail.gmail.com>

Interestingly,

   as.list(substitute(...()))

also works.

On Sun, Aug 12, 2018 at 1:16 PM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:
> 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
>
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



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