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@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to