我需要一个接受任意数量参数的函数,并将它们作为表达式存储在变量中而不进行评估。我设法用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)
为了澄清,我问的是如何编写一个行为类似于expression()
的函数。我不能直接使用expression()
的原因太长而无法解释。
答案 0 :(得分:14)
最惯用的方式是:
f <- function(x, y, ...) {
match.call(expand.dots = FALSE)$`...`
}
答案 1 :(得分:5)
使用.
中的plyr
作为原型
foo <- function (...)
{
as.expression(as.list(match.call()[-1]))
}
答案 2 :(得分:3)
最终的预期结果有点模糊(你能澄清一下吗?)。但是,这可能会有所帮助:
foo2 <- function(...) {
expr <- as.list(substitute(list(...)))[-1L]
class(expr) <- "expression"
expr
}
示例:
foo2(x=bla, y=2)
# expression(x = bla, y = 2)