Как я могу использовать NSE и фильтровать выражение, используя ... (многоточие)? - PullRequest
2 голосов
/ 01 февраля 2020

Как я могу использовать волшебные c точки (...) / эллипсис для фильтрации по произвольному столбцу?

df = tibble::tibble(col1 = c('a', 'b', 'c'), col2 = c(1,3,4))

my_func = function(x, ...){
  df %>%
    dplyr::filter(... == x)
}

my_func('a', col1)


# Should return:
# A tibble: 1 x 2
  col1   col2
  <chr> <dbl>
1 a         1

1 Ответ

4 голосов
/ 01 февраля 2020

Мы можем преобразовать в выражение (quo) и оценить (!!). Здесь мы предполагаем, что в filter

my_func <- function(x, ...){
   df %>%
      dplyr::filter(!! quo(...) == x)
  }



my_func('a', col1)
# A tibble: 1 x 2
#  col1   col2
#  <chr> <dbl>
#1 a         1

будет передан только один столбец, тогда может быть лучше использовать filter_at


Может быть также лучше использовать {{}}, если мы можем передать в качестве аргумента вместо ...

my_func <- function(x, coln) {
        df %>%
              filter({{coln}} == x)
    }
my_func('a', col1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...