我想了解为什么在...
中嵌套extra
时f()
参数与g()
参数匹配。
假设f()
是此功能:
f <- function(..., extra = NULL) {
. <- list(...)
print(.)
}
输出是预期的...
参数中包含的内容:
f("a", "b", "c", extra = "123")
# [[1]]
# [1] "a"
# [[2]]
# [1] "b"
# [[3]]
# [1] "c"
但是,在另一个函数中使用它时,请说g()
:
g <- function(..., extra = NULL) {
f(..., extra)
}
...
还捕获了extra
参数:
g("a", "b", "c", extra = "123")
# [[1]]
# [1] "a"
# [[2]]
# [1] "b"
# [[3]]
# [1] "c"
# [[4]]
# [1] "123"
我的问题有两个:(1)为什么会这样(2)如何正确处理呢?
答案 0 :(得分:3)
在f()
中,您定义并设置了一个名为extra的参数,该参数从未使用过,因此它不会出现在任何地方。 f(..., extra)
中的g()
捕获g中的所有参数,并将它们分配给...
中的f()
。 g(..., extra)
中的额外内容与f(..., extra = NULL)
中的额外内容无关。它们具有相同的名称,但是生活在不同的环境中-分别是g()
和f()
的环境。要实现相同的行为,请在函数调用中将g()
的附加项分配给f()
的附加项:
g1 <- function(..., extra = NULL) {
f(..., extra = extra)
}
> g1("a", "b", "c", extra = NULL)
[[1]]
[1] "a"
[[2]]
[1] "b"
[[3]]
[1] "c"
>