Печать буквального имени столбца внутри функции 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)
Другие вопросы по тегам