如果我想知道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())
返回<...>
,看起来很有希望,但我无法弄清楚如何从中提取任何有用的内容。
eval(list(...), envir = parent.frame())
引发错误,声称...
使用不正确。
如何从...
检索bar
?
答案 0 :(得分:3)
想出来。我需要eval
和substitute
的组合。 baz
应定义为
baz <- function()
{
dots <- eval(substitute(list(...), env = parent.frame()))
print(dots)
}
答案 1 :(得分: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")
答案 2 :(得分:1)
总之:不要。试图重新定义R的范围规则只会导致痛苦和痛苦。