【问题标题】:using the dots argument in replicate expression fails - why exactly? [duplicate]在复制表达式中使用点参数失败​​ - 为什么? [复制]
【发布时间】:2016-07-11 19:17:20
【问题描述】:

我想在 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

在评估replicate 中的expr 参数期间,这里的机制到底是什么。谁能解释一下这种行为?

【问题讨论】:

  • 你是对的。谢谢!对我来说:RTM,RTM :/
  • 非标准评价的乐趣。在这个具体例子中直接使用sapply即可。

标签: r function evaluation


【解决方案1】:

此行为已记录在案:

如果 expr 是一个函数调用,请注意关于它在哪里的假设 评估,特别是……可能指的是什么。你可以通过 函数调用的附加命名参数作为附加命名 要复制的参数:请参阅“示例”。

在“示例”部分:

## 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-12
    • 2014-05-10
    • 1970-01-01
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    相关资源
    最近更新 更多