selection -> data-mask, via across()

Setup:

  • outer function, my_group_by(), expects selection
  • inner function, dplyr::group_by(), expects data-masking

Building the bridge:

# single selection
my_group_by <- function(data, var) {
  data %>% dplyr::group_by(across({{ var }}))
}

# multiple selections
my_group_by <- function(.data, ...) {
  .data %>% dplyr::group_by(
    across(  # <- expects tidy-select; returns tibble
      c(     # <- tidy-selection
        ...  # <- tidy-selection
      )
    )
  )
}