比方说,我想要一个打印给出的所有表达式的函数:
> foo(abc(def),gh[i],j)
abc(def)
gh[i]
j
我想知道是否有个好方法。我已经解决了如何使用递归的方法:
foo <- function(x, ...) {
if (!is.missing(x)) {
print(substitute(x))
foo(...)
}
}
但是我觉得必须有更好的方法,使用循环,或者可能使用list()和lapply()之类的方法。
您可以使用特殊的...()
语法
foo <- function(...) {
exprs <- substitute(...())
print(exprs)
}
foo(abc(def), gh[i], j)
这里exprs
将是您可以随意迭代的列表。
事实证明,有两种不同的方法可以实现这一目标。我认为我要使用的方式是:
foo <- function(...) {
call <- as.list(sys.call())
for (expr in call[2:length(call)]) {
print(expr)
}
}
执行相同操作的另一种方法:
call <- as.list(substitute({...}))
另一种替代方法,不需要[2:length(call)]
:
call <- eval(substitute(expression(...)))