Печать буквального имени столбца внутри функции R?
Я относительно новичок в R и пытаюсь создать функцию для применения к списку имен переменных, для которых я хотел бы создать частотные таблицы. Но функция, как я написал, печатает имя локальной переменной для функции, а не фактическое имя переменной.
create_tabyls <- function(df,col_name) {
result <- tabyl(df[[col_name]]) %>%
adorn_pct_formatting() %>%
adorn_totals()
print(result)
}
А затем, когда я вызываю свою функцию с помощью:
create_tabyls(df,'AGE')
Я получил:
df[[col_name]] n percent valid_percent
1 43141 3.5% 3.7%
2 810172 66.4% 69.7%
3 309058 25.3% 26.6%
<NA> 57246 4.7% -
Total 1219617 - -
Я не понимаю, почему мои выходные данные печатаются как df[[col_name]], а не как df[[AGE]]. Может ли кто-нибудь помочь мне выяснить, какую ошибку я делаю? Я пытаюсь заставить его распечатать фактическое значение, которое я передаю функции, а не просто печатать имя переменной функции.
Спасибо за любую помощь!
1 ответ
Мы можем преобразовать в sym
бол и оценить (!!
), так как вход представляет собой строку
library(janitor)
library(dplyr)
create_tabyls <- function(df,col_name) {
df %>%
select(col_name) %>%
tabyl(!! rlang::sym(col_name)) %>%
adorn_pct_formatting() %>%
adorn_totals()
}
-тестирование
data(mtcars)
mtcars$vs <- as.character(mtcars$vs)
create_tabyls(mtcars, 'vs')
# vs n percent
# 0 18 56.2%
# 1 14 43.8%
# Total 32 -
Или другой вариант, если мы используем имя столбца без кавычек в качестве входных данных, тогда мы можем использовать фигурно-фигурный оператор ({{}}
)
create_tabyls <- function(df,col_name) {
df %>%
tabyl({{col_name}}) %>%
adorn_pct_formatting() %>%
adorn_totals()
}
create_tabyls(mtcars, vs)
# vs n percent
# 0 18 56.2%
# 1 14 43.8%
# Total 32 -
Или, если нам нужны оба варианта, т.е. строка или имя без кавычек, тогда ensym
с !!
create_tabyls <- function(df,col_name) {
df %>%
tabyl(!! rlang::ensym(col_name)) %>%
adorn_pct_formatting() %>%
adorn_totals()
}
create_tabyls(mtcars, 'vs')
create_tabyls(mtcars, vs)