Я пытаюсь использовать rlang
для написания пользовательских функций.Хотя я могу сделать это, когда функции включают аргумент data
, у меня возникают проблемы с тем, как правильно использовать квази-цитаты, когда функциям требуются векторы, и мне нужно использовать оператор $
.
Вот игрушечный пример -
library(tidyverse)
# proper implementation
tryfn <- function(data, x, y) {
# creating a dataframe
data <-
dplyr::select(
.data = data,
!!rlang::enquo(x),
!!rlang::enquo(y)
) %>% # dropping unused levels
dplyr::mutate(.data = .,
!!rlang::enquo(x) := droplevels(as.factor(!!rlang::enquo(x))))
# checking if data is getting imported properly
print(data)
# figuring out number of levels in the grouping factor
return(length(levels(data$`!!rlang::enquo(x)`))[[1]])
}
# using the function
tryfn(ggplot2::msleep, vore, brainwt)
#> # A tibble: 83 x 2
#> vore brainwt
#> <fct> <dbl>
#> 1 carni NA
#> 2 omni 0.0155
#> 3 herbi NA
#> 4 omni 0.00029
#> 5 herbi 0.423
#> 6 herbi NA
#> 7 carni NA
#> 8 <NA> NA
#> 9 carni 0.07
#> 10 herbi 0.0982
#> # ... with 73 more rows
#> Warning: Unknown or uninitialised column: '!!rlang::enquo(x)'.
#> [1] 0
Как можно видеть здесь, данные импортируются правильно, но значение return
неверно, потому что я не умею использоватьквазиквотация в контексте оператора $
.Как я могу это сделать?