Я знаю, как создавать функции, которые поддерживают квази-кавычку для аргумента с именем 'variable' {использование dplyr::enquo(variable)
для аргументов без кавычек}} или функций, которые требуют, чтобы вы указывали аргумент {используя rlang::sym("variable")
}. Есть ли простой способ сделать функции, которые поддерживают оба, заключенные в кавычки, без кавычек?
Например, dplyr::select()
допускает как select(mtcars, mpg)
, так и select(mtcars, "mpg")
. Какова лучшая практика для построения функции, которая может делать либо? Одним из соображений является влияние на маскирование данных, которое, я не уверен, нужно ли учитывать при создании более сложных функций.
Я просматривал страницы github для основных функций c dplyr, но простая функция, такая как select, основана на совершенно новом пакете (tidyselect), поэтому многое происходит. Я не видел четкого объяснения в книге оценки Tidy либо. Ниже приведена взломанная функция, которая поддерживает аргументы в кавычках и без кавычек, но это не является надежным решением. Я уверен, что есть более простой способ.
library(dplyr)
data(mtcars)
test_func <- function(variable) {
if(nrow(count(mtcars, {{variable}})) == 1) {
variable <- rlang::sym(variable)
}
count(mtcars, {{variable}})
}
all_equal(
test_func(cyl),
test_func("cyl")
)