在复制表达式中使用dots参数失败 - 为什么会这样?

时间:2016-03-24 08:44:45

标签: r function evaluation

我想在...的表达式中使用点参数(replicate)。我注意到他们没有这样做的效果:

foo <- function(k=1, n=10, ...) 
{
  replicate(k, rnorm(n, ...))
}

foo(2, mean=100)  

结果的平均值不是100。

           [,1]       [,2]
[1,]  0.2859647 -0.1046510
[2,] -0.7867414  0.5347617

然而,使用包装器将起作用。

foo2 <- function(k=1, n=10, ...) 
{
  f <- function() rnorm(n, ...)
  replicate(k, f())
}

foo2(2, mean=100)  

现在,结果的平均值为100。

         [,1]     [,2]
[1,] 100.9644 100.6287
[2,] 100.0804 101.0218

在评估expr中的replicate参数时,这里的机制到底是什么?任何人都可以解释一下这种行为吗?

1 个答案:

答案 0 :(得分:1)

记录了此行为:

  

如果expr是函数调用,请注意关于它的位置的假设   评估,尤其是......可能会引用什么。你可以通过   函数调用的附加命名参数作为附加命名   复制的参数:参见'示例'。

在&#34;例子&#34;部分:

## use of replicate() with parameters:
foo <- function(x = 1, y = 2) c(x, y)
# does not work: bar <- function(n, ...) replicate(n, foo(...))
bar <- function(n, x) replicate(n, foo(x = x))
bar(5, x = 3)