我想包装一个 replicate()
使用省略号调用函数。说:
fo()
有 2 个参数:fo <- function(x, times) x * times
replicate()
将按名称传递第一个,第二个使用 ...
.rep_it <- function(N, ...) replicate(N, fo(x=3, ...))
事实证明,而不是传递第二个参数,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 的建议修改
关于R:如何使用带有省略号的replicate() ...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54077899/