r - 为什么在使用嵌套函数时 R 省略号 (...) 匹配更多参数?
问题描述
我想了解为什么当...
嵌套在.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)如何正确处理?
解决方案
在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"
>
推荐阅读
- angular-material - 角垫列表单个可选选项
- python - Python - 元组索引超出范围,但我认为不是
- asp.net-mvc - 将 AppService URL 映射到应用程序设置值
- java - InputStream 无法处理 2016 字节
- python - 属性错误:模块“请求”在 pandas-DataReader 中没有属性“会话”
- ebay-api - 未找到 Ebay 库存 API“获取库存项目”404
- git - 使用与父级相同的协议使 git fetch 子模块?
- c - 将具有给定端口的 {ipv6 或 ip4 或域名} 转换为 struct sockaddr
- r - 根据另一列的条件加入
- python - 如何从 python 脚本内部运行 url 到命令行?