首页 > 解决方案 > 为什么在使用嵌套函数时 R 省略号 (...) 匹配更多参数?

问题描述

我想了解为什么当...嵌套在.extraf()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)如何正确处理?

标签: rfunctionellipsis

解决方案


f()您定义并设置一个名为 extra 的参数时,该参数从未使用过,因此它不会出现在任何地方。f(..., extra)in捕获 g 中的g()所有参数并将它们分配给...in f()。额外的 ing(..., extra)与额外的 in 无关f(..., extra = NULL)。它们具有相同的名称,但生活在不同的环境中——分别是g()和的环境f()。为了实现相同的行为,在函数调用中将g()'extra 分配给 ' extra:f()

g1 <- function(..., extra = NULL) {
    f(..., extra = extra)
}
> g1("a", "b", "c", extra = NULL)
[[1]]
[1] "a"

[[2]]
[1] "b"

[[3]]
[1] "c"

> 

推荐阅读