如何在嵌套函数中使用 match.call

jbk*_*nst 3 arguments r function

...我试图获取函数组合中的名称列表和表达式。我们假设一个函数:

g <- function(...) {
  print(as.list(match.call(expand.dots = FALSE))$...)
}
Run Code Online (Sandbox Code Playgroud)

如果我们调用:

g(rnorm(5), par = "a", 4 + 4)
Run Code Online (Sandbox Code Playgroud)

我们得到:

[[1]]
rnorm(5)

$par
[1] "a" 

[[3]]
4 + 4
Run Code Online (Sandbox Code Playgroud)

这很好:我们可以获取每个参数的表达式调用并进行验证。但我需要这个,但在函数组合中:

f <- function(...)  g(...)

f(rnorm(5), par = "a", 4 + 4)
Run Code Online (Sandbox Code Playgroud)

但我得到:

[[1]]
..1

$par
[1] "a"

[[3]]
..3
Run Code Online (Sandbox Code Playgroud)

我正在阅读一些章节http://adv-r.had.co.nz/Expressions.html,但我还找不到解决方案。我知道,我需要继续学习。

有小费吗?提前致谢。

MrF*_*ick 5

如果您只需要参数,则不需要整个调用。只是用来substitute()访问...而不是match.call

g <- function(...) {
    print(substitute(...()))
}

f <- function(...)  g(...)
f(rnorm(5), par = "a", 4 + 4)

# [[1]]
# rnorm(5)
# 
# $par
# [1] "a"
# 
# [[3]]
# 4 + 4
Run Code Online (Sandbox Code Playgroud)

还有哈德利的推荐

g <- function(...) {
    print( eval(substitute(alist(...))))
}
Run Code Online (Sandbox Code Playgroud)