为什么在使用嵌套函数时R省略号(...)与更多参数匹配?

时间:2019-08-03 06:34:27

标签: r function ellipsis

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

1 个答案:

答案 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"

>