передать список выражений в фильтр / выбрать - PullRequest
1 голос
/ 20 марта 2020

Мне интересно написать функцию, которая возвращает фрейм данных с подмножеством по умолчанию в его строках и столбцах.

Я могу получить следующий код для работы:

library(rlang)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

default_cols <- quos(mpg, cyl, vs)
default_filters <- quos(mpg > 20, cyl == 6)

my_filter_select <- function(
  filters = default_filters, 
  selects = default_cols
) {

  mtcars %>%
    filter(!!! filters) %>% 
    select(!!! selects)
}

my_filter_select()
#>    mpg cyl vs
#> 1 21.0   6  0
#> 2 21.0   6  0
#> 3 21.4   6  1

Создан в 2020-03-19 пакетом Представить (v0.3.0)

Но добавление к значению по умолчанию кажется громоздким, поскольку мне пришлось бы использовать append(default_filters, quos(<filter-expr>)).

Мне интересно, есть ли более простой способ сделать это.

Я попробовал следующее, передав фильтр по умолчанию и выбрав выражения в виде списка (предположительно, более простой интерфейс), и он вылетел:

library(rlang)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

default_cols <- function() list(mpg, cyl, vs)
default_filters <- function() list(mpg > 20, cyl == 6)

my_filter_select2 <- function(
  filters = default_filters(),
  selects = default_cols()
) {
  fff <- enquos(filters)
  sss <- enquos(selects)

  mtcars %>%
    filter(!!! filters) %>%
    select(!!! selects)
}

my_filter_select2()
#> Error in default_filters(): object 'mpg' not found

Создано в 2020-03-19 пакет prex (v0.3.0)

Таким образом, цель состоит в том, чтобы каким-то образом передать списки в качестве аргументов в функцию, которая в конечном итоге будет оцениваться либо в filter, либо select.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...