嵌套函数调用和省略号的命名参数相同

时间:2014-12-12 10:53:38

标签: r parameter-passing ellipsis

让我们考虑以下情况:

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。它们的来源可用herehere

编辑:为了澄清,我有以下用例。我想打电话给quiet传递以下参数:

    {li> install.packages quiet = FALSE
  1. install.packagesquiet = FALSE
  2. 的嵌套调用
  3. .install.winbinaryquiet = TRUE
  4. 的嵌套调用

1 个答案:

答案 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)。