循环到R中给函数的未引用表达式

问题描述 投票:0回答:2

比方说,我想要一个打印给出的所有表达式的函数:

> foo(abc(def),gh[i],j)
abc(def)
gh[i]
j

我想知道是否有个好方法。我已经解决了如何使用递归的方法:

foo <- function(x, ...) {
    if (!is.missing(x)) {
        print(substitute(x))
        foo(...)
    }
}

但是我觉得必须有更好的方法,使用循环,或者可能使用list()和lapply()之类的方法。

r loops abstract-syntax-tree variadic-functions
2个回答
0
投票

您可以使用特殊的...()语法

foo <- function(...) {
  exprs <- substitute(...())
  print(exprs)
}
foo(abc(def), gh[i], j)

这里exprs将是您可以随意迭代的列表。


0
投票

事实证明,有两种不同的方法可以实现这一目标。我认为我要使用的方式是:

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(...)))
© www.soinside.com 2019 - 2024. All rights reserved.