在
现在,我可以接受这个警告,但是想要了解背后的原因。所以我创建了这个小的人为例子:
sapply
和replicate
的文档中,有一个关于使用...
的警告。现在,我可以接受这个警告,但是想要了解背后的原因。所以我创建了这个小的人为例子:
innerfunction<-function(x, extrapar1=0, extrapar2=extrapar1)
{
cat("x:", x, ", xp1:", extrapar1, ", xp2:", extrapar2, "\n")
}
middlefunction<-function(x,...)
{
innerfunction(x,...)
}
outerfunction<-function(x, ...)
{
cat("Run middle function:\n")
replicate(2, middlefunction(x,...))
cat("Run inner function:\n")
replicate(2, innerfunction(x,...))
}
outerfunction(1,2,3)
outerfunction(1,extrapar1=2,3)
outerfunction(1,extrapar1=2,extrapar2=3)
也许我犯了一些显而易见的错误,但是我发现这个结果相当令人沮丧。那么,有没有人可以解释一下为什么在调用outerfunction
的所有上述情况中,我会得到这样的输出:
Run middle function:
x: 1 , xp1: 0 , xp2: 0
x: 1 , xp1: 0 , xp2: 0
Run inner function:
x: 1 , xp1: 0 , xp2: 0
x: 1 , xp1: 0 , xp2: 0
就像我说的那样:文档似乎对此发出了警告,但我不明白为什么会这样。
bar(5, x = 3)
,我得到了一个2*5的矩阵。 - Gavin Simpson?replicate
中的引用是我在问题中提到的警告。我想知道的是这个警告的含义是什么?“where it is evaluated”和“what ... might refer to”对我来说有些神秘。所以,再次强调:我接受它不起作用,但是为什么不起作用?这可能会极大地帮助我/他人理解R中的参数传递/解析。 - Nick Sabbeexpr
中调用该函数,而只是评估了expr
。由于没有调用它,因此从外部调用...
到expr
中就没有传递参数。这是一个微妙的区别,但非常重要;这就像在全局环境中完全像那样调用middlefunction(...)
(你不能这样做,因为R不允许你那样交互使用...
),其中...
不指代任何内容。 - Gavin Simpson