3

如果我想知道...R 函数的参数中存储了什么,我可以简单地将其转换为列表,如下所示

foo <- function(...)
{
  dots <- list(...)
  print(dots)
}

foo(x = 1, 2, "three")
#$x
#[1] 1
#
#[[2]]
#[1] 2
#
#[[3]]
#[1] "three"

我不知道如何...在调用函数中进行评估。在下一个示例中,我希望 的内容将参数baz返回给....bar

bar <- function(...)
{
  baz()
}

baz <- function()
{ 
  # What should dots be assigned as?
  # I tried                                           
  # dots <- get("...", envir = parent.frame())
  # and variations of
  # dots <- eval(list(...), envir = parent.frame())
  print(dots)
}

bar(x = 1, 2, "three")

get("...", envir = parent.frame())return <...>,看起来很有希望,但我不知道如何从中提取任何有用的东西。

eval(list(...), envir = parent.frame())抛出一个错误,声称...使用不正确。

如何检索...from bar

4

3 回答 3

3

弄清楚了。我需要eval和的组合substitutebaz应定义为

baz <- function()
{ 
  dots <- eval(substitute(list(...), env = parent.frame()))
  print(dots)
}
于 2010-08-09T17:00:56.010 回答
1

这应该有效:

bar <- function(...)
{
  baz(...=...)
}

baz <- function(...)
{ 
  print(list(...))
}

bar(x = 1, 2, "three")

只需在子功能中分配它。

或者,您可以将省略号分配为父函数中的列表:

bar <- function(...)
{
  bar.x <- list(...)
  baz()
}

baz <- function()
{ 
  dots <- get("bar.x", envir = parent.frame())
  print(dots)
}

bar(x = 1, 2, "three")

这是相同的想法,但我不建议这样做,因为您正在覆盖省略号:

bar <- function(...)
{
  ... <- list(...)
  baz()
}

baz <- function()
{ 
  dots <- get("...", envir = parent.frame())
  print(dots)
}

bar(x = 1, 2, "three")
于 2010-08-09T16:41:46.090 回答
1

一句话:不要。试图重新定义 R 的作用域规则只会导致心痛和痛苦。

于 2010-08-13T02:06:05.687 回答