我想使用省略号将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))
,但是我真的不明白那里发生了什么...
谢谢!
答案 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的建议修改