tidyr :: collect - работает на многоточии - PullRequest
1 голос
/ 05 марта 2019

Приведенный ниже код является моим первоначальным намерением.

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)

Ответы [ 3 ]

2 голосов
/ 05 марта 2019

Мы можем использовать 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

0 голосов
/ 06 марта 2019

Альтернативный аргумент в виде символа (rlang> 0.1.2).

gather_df <- function (...) {
  grp_var <- rlang::sym(...)
  mtcars %>% 
    group_by(!!!grp_var) %>% 
    gather(key, value, -!!(grp_var))
}

gather_df("vs")
0 голосов
/ 06 марта 2019

Я использовал quo () вместо enquos () для обеспечения совместимости с rlang 0.1.2.

gather_df <- function (...) {
  vars <- quo(...)
  mtcars %>% 
    group_by(!!!vars) %>% 
    tidyr::gather(key, value, -c(!!!vars))
}

gather_df(vs)
...