这个答案How to convert a list() to an ellipsis in R?不令人满意,因为它不适用于我的问题:
foo <- function(...) {
print(length(list(...)))
}
foo2 <- function(listArg) {
# HERE convert from list to ...
foo(listArg)
}
foo() == foo2(list())
foo(1, 2) == foo2(list(1, 2))
foo(1, 2, 3) === foo2(list(1, 2, 3))
foo2
“#在这里将列表中的内容转换为...”中的内容
答案 0 :(得分:2)
也许这可以回答您的问题:
foo <- function(...) length(list(...))
foo2 <- function(listArg) do.call(foo, listArg)
foo() == foo2(list())
# [1] TRUE
foo(1, 2) == foo2(list(1, 2))
# [1] TRUE
foo(1, 2, 3) == foo2(list(1, 2, 3))
# [1] TRUE
通过这种方式,我们不会将列表转换为省略号,而是通过在调用中进行转换来不同地调用foo
。
答案 1 :(得分:1)
一定要使用do.call()
。
我们可以使您的代码适用于:
list2dots <- function(x) {
make_dots <- function(...) environment()$...
do.call(make_dots, as.list(x))
}
foo <- function(...) {
length(list(...))
}
foo2 <- function(listArg) {
`...` <- list2dots(listArg)
foo(...)
}
foo() == foo2(list())
#> [1] TRUE
foo(1, 2) == foo2(list(1, 2))
#> [1] TRUE
foo(1, 2, 3) == foo2(list(1, 2, 3))
#> [1] TRUE