R:如何在带有省略号的情况下使用copy()...?

时间:2019-01-07 16:10:43

标签: r ellipsis

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

  • fo()有2个参数:fo <- function(x, times) x * times
  • replicate()将第一个传递名称,第二个使用...传递。 rep_it <- function(N, ...) replicate(N, fo(x=3, ...))

事实证明,复制似乎没有传递第二个参数,而是传递了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)),但是我真的不明白那里发生了什么...

谢谢!

1 个答案:

答案 0 :(得分:4)

我们捕获...并将其传递到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的建议修改