如何扩展省略号(...)参数而不在R中进行评估

Ern*_*t A 6 r ellipsis lazy-evaluation

我需要一个接受任意数量的参数的函数,并将它们作为表达式存储在变量中而不进行评估.我设法做到了,match.call但似乎有点"kludgy".

foo <- function(...) {
  expr <- match.call()
  expr[[1]] <- expression
  expr <- eval(expr)
  # do some stuff with expr
  return(expr)
}

> bla
Error: object 'bla' not found
> foo(x=bla, y=2)
expression(x = bla, y = 2)
Run Code Online (Sandbox Code Playgroud)

澄清

为了澄清,我问如何编写一个行为类似的函数expression().我不能expression()直接使用太长时间无法解释的原因.

had*_*ley 16

最惯用的方式是:

f <- function(x, y, ...) {
  match.call(expand.dots = FALSE)$`...`
}
Run Code Online (Sandbox Code Playgroud)

  • 确实是+1惯用语-它广泛用于基数R中,例如,通过lm()中的公式指定的线性模型代码中。 (2认同)

mne*_*nel 5

使用.from plyr作为原型

foo <-   function (...) 
  {
  as.expression(as.list(match.call()[-1]))
  }
Run Code Online (Sandbox Code Playgroud)