这个问题涉及“用dplyr编程”
我想切片函数的...参数,并使用每个元素作为相应函数的参数。
foo <- function(...){
<some code>
}
应该以这种形式评估foo(x, y, z)
:
list(bar(~x), bar(~y), bar(~z))
以便x, y, z
继续引用,直到他们在bar
进行评估。
我试过了:
foo <- function(...){
arguments <- quos(...)
out <- map(arguments, ~bar(UQ(.)))
out
}
我有两个意图:
future::futureOf()
变成一个能让我一次获得多个期货的函数。这种方法可能过于复杂,因为我还没有完全理解tidyeval的基本概念。
答案 0 :(得分:2)
你真的不需要任何包。可以使用match.call
。
foo <- function(..., envir = parent.frame()) {
cl <- match.call()
cl$envir <- NULL
cl[[1L]] <- as.name("bar")
lapply(seq_along(cl)[-1], function(i) eval(cl[c(1L, i)], envir))
}
# test
bar <- function(...) match.call()
foo(x = 1, y = 2, z = 3)
,并提供:
[[1]]
bar(x = 1)
[[2]]
bar(y = 2)
[[3]]
bar(z = 3)
另一项测试
bar <- function(...) ..1^2
foo(x = 1, y = 2, z = 3)
,并提供:
[[1]]
[1] 1
[[2]]
[1] 4
[[3]]
[1] 9