让我们考虑以下情况:
foo <- function(param, ...)
{
print(paste("foo:", param))
bar(...)
}
bar <- function(param = NA)
{
print(paste("bar:", param))
}
问题:如何致电foo
,以便foo
获得param = "foo"
而bar
获得param = "bar"
?
答案是here,可以使用部分匹配:
foo(param = "foo", par = "bar")
[1] "foo: foo"
[1] "bar: bar"
但是如果使用部分匹配不可用呢?例如,
param
重命名为p
; para_whatever
添加到bar
; xyz
; bar
并且解决方案不再有效。可以做些什么(当然不修改源代码)?
说明具有三个嵌套调用和部分匹配失败的最后一个选项,
foo <- function(param, ...)
{
print(paste("foo:", param))
bar(...)
}
bar <- function(param = NA, ...)
{
print(paste("bar:", param))
xyz(...)
}
xyz <- function(param = NA, para_whatever = NA)
{
print(paste("xyz:", param))
}
我正在寻找能产生
的电话[1] "foo: foo"
[1] "bar: bar"
[1] "xyz: xyz"
所描述的情况实际上发生在install.packages
的Windows下,将...
传递给调用.install.winbinary
的{{1}}。这三个都有一个参数download.file
。它们的来源可用here和here。
编辑:为了澄清,我有以下用例。我想打电话给quiet
传递以下参数:
install.packages
quiet = FALSE
install.packages
对quiet = FALSE
.install.winbinary
对quiet = TRUE
答案 0 :(得分:1)
我真的不明白这个问题,但是因为你要求一个位置匹配的例子:
foo <- function(param, ...)
{
print(paste("foo:", param))
bar(..1)
}
bar <- function(param = NA)
{
print(paste("bar:", param))
}
foo(param = "foo", "bar", "baz")
#[1] "foo: foo"
#[1] "bar: bar"
编辑:如果通过省略号将参数传递给两个不同的函数,则无法将不同的参数值传递给这些函数。您需要更改调用函数(例如,您可以使用trace
)。