Why? (In Practice)

Foreign and local expressions:

my_fun <- function(my_var) {
  their_function({{ my_var }})
  # or
  my_new_var <- enquo(my_var)
  their_function(!!my_new_var)
}

External defusing with ...:

my_group_by <- function(data, vars) {
  data |>
    dplyr::group_by(!!!vars)
}

my_group_by(data, dplyr::vars(X1, X2))
  • dplyr::vars() creates quosures and passes them
    • An alias of rlang::quos()
  • “As a rule of thumb, quosures are only needed for arguments defused with enquo() or enquos() (or with {{ which calls enquo() implicitly)”