R:如何使用带省略号的 replicate() ...?

R: how to use replicate() with ellipsis ...?

我想使用省略号将 replicate() 调用包装在函数中。说:

事实证明,复制似乎没有传递第二个参数,而是传递了 0 个值?

fo <- function(x, times)  x * times
rep_it <- function(N, ...) replicate(N, fo(x=3, ...)) 
rep_it(5, times = 4) # should return 5 times 3 * 4 = 12
#> [1] 0 0 0 0 0

这好像是省略号的缘故!如果我要为论点命名,那很好:

rep_it2 <- function(N, times) replicate(N, fo(x=3, times)) 
rep_it2(5, times = 4)
#> [1] 12 12 12 12 12

为什么会出现这种情况,如何处理?我看到 replicate() 函数中有一个相当复杂的调用:eval.parent(substitute(function(...) expr)),但我不太明白那里发生了什么...

谢谢!

我们捕获 ... 并将其传递给 replicate

fo <- function(x, times)  x * times
rep_it <- function(N, ...) {
    args <- unlist(list(...), use.names = FALSE)
    replicate(N, fo(x = 3, times = args))
   }


rep_it(5, times = 4) 
#[1] 12 12 12 12 12

编辑:根据@Julius Vainora 的建议修改