нестандартная оценка (NSE) с dplyr в R - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь написать функцию для создания сводной таблицы. Переменные, которые я хочу обобщить, могут измениться, поэтому я бы хотел, чтобы они были в функции. Я последовал примеру из dpylr vignette о NSE, но он почему-то не работает для меня. Вот функция:

print(agegroup) # this is a string
table_summary <- function (data, group_by1){

  quo_group_by1 = quo(group_by1)
  print(quo_group_by1)

  data %>%
  dplyr::group_by(!! quo_group_by1) %>%
  dplyr::summarise(N = n()) %>%
  dplyr::mutate(pct = paste0((round(N/sum(N)*100, 2))," %"))

}

table_summary(clientData, agegroup)

и я получаю следующую ошибку:

[1] "ag5"
<quosure>
expr: ^group_by1
env:  0x7faaec29e030
Error: Column `group_by1` is unknown

Как я могу это исправить?

1 Ответ

0 голосов
/ 13 апреля 2020

Вы должны использовать кудрявый ({{}}), который избегает quo & !!. Также вы можете использовать count, который является ярлыком для group_by + summarise.

table_summary <- function (data, group_by1){

   data %>%
    dplyr::count({{group_by1}}) %>%
    dplyr::mutate(pct = paste0((round(N/sum(N)*100, 2))," %"))
}

table_summary(clientData, agegroup)

Кажется agegroup строка. Чтобы продолжить подход OP, нам нужно преобразовать его в символ (sym) и оценить его (!!)

table_summary <- function (data, group_by1){

  data %>%
    dplyr::group_by(!!sym(group_by1)) %>%
    dplyr::summarise(N = n()) %>%
    dplyr::mutate(pct = paste0((round(N/sum(N)*100, 2))," %"))

}
...