下面的代码是我的初衷。
gather_df <- function (...) {
mtcars %>%
group_by(...) %>%
tidyr::gather(key, value, -vs)
}
gather_df(vs)
为进一步概括,是否可以对省略号进行操作?
gather_df <- function (...) {
mtcars %>%
group_by(...) %>%
tidyr::gather(key, value, -...)
}
gather_df(vs)
答案 0 :(得分:2)
我们可以使用enquos
捕获所有输入,然后使用!!!
进行评估
library(dplyr)
gather_df <- function (...) {
vars<-enquos(...)
mtcars %>%
group_by(!!!vars) %>%
tidyr::gather(key, value, -c(!!!vars))
}
gather_df(vs)
gather_df(vs,cyl)
gather_df(vs,cyl,hp)
PS:我正在使用rlang 0.3.1
答案 1 :(得分:0)
我使用quo()而不是enquos()来保持rlang 0.1.2兼容性。
gather_df <- function (...) {
vars <- quo(...)
mtcars %>%
group_by(!!!vars) %>%
tidyr::gather(key, value, -c(!!!vars))
}
gather_df(vs)
答案 2 :(得分:0)
作为字符的替代参数(rlang> 0.1.2)。
gather_df <- function (...) {
grp_var <- rlang::sym(...)
mtcars %>%
group_by(!!!grp_var) %>%
gather(key, value, -!!(grp_var))
}
gather_df("vs")