10

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

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)

澄清

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

4

3 回答 3

23

最惯用的方法是:

f <- function(x, y, ...) {
  match.call(expand.dots = FALSE)$`...`
}
于 2012-11-13T04:14:17.507 回答
5

使用.fromplyr作为原型

foo <-   function (...) 
  {
  as.expression(as.list(match.call()[-1]))
  }
于 2012-11-13T00:33:32.427 回答
3

最终的预期结果有点模糊(你能澄清一下吗?)。但是,这可能会有所帮助:

foo2 <- function(...) {
  expr <- as.list(substitute(list(...)))[-1L]
  class(expr) <- "expression"
  expr
}

例子:

foo2(x=bla, y=2)
# expression(x = bla, y = 2)
于 2012-11-13T00:46:39.077 回答