Como adicionar uma função dentro de uma função?
Sep 11 2020
Tenho a função de criar um enredo. No entanto, gostaria de incluir algum pré-processamento na função para converter valores em rótulos usando o sjlabelledpacote.
library(haven)
data <- read_spss("http://staff.bath.ac.uk/pssiw/stats2/SAQ.sav")
library(dplyr)
library(labelled)
library(sjlabelled)
bar_plot <- function(data, var) {
data %>%
as_label(var) %>%
filter({{var}} != "Neither") %>%
ggplot(aes({{var}})) +
geom_bar() +
coord_flip() +
theme_classic() +
labs(x = NULL, y = "Count", title = var_label(pull(data, {{var}})))
}
bar_plot(data, Q01)
Estou recebendo um gráfico, mas está incorreto e recebo este erro no console 1 variables were not found in the dataset: var
Eu tentei usar curly-curly, eval, !!, sym, ensym, mas nenhum deles funcionou.
O problema é com esta linha: as_label(var) %>%
Respostas
2 astrofunkswag Sep 11 2020 at 20:26
O problema é que a as_labelfunção captura a entrada do usuário com deparse e substitute. Você mesmo pode dar uma olhada na função: sjlabelled:::as_label.data.frameou chamá-la com debug.
Para contornar isso, você pode usar uma combinação de do.calle ensym( enexprtambém funciona).
bar_plot <- function(data, var) {
data <- do.call(as_label, list(data, ensym(var)))
data %>%
filter({{ var }} != "Neither") %>%
ggplot(aes({{ var }})) +
geom_bar() +
coord_flip() +
theme_classic() +
labs(x = NULL, y = "Count", title = var_label(pull(data, {{ var }})))
}
data %>% bar_plot(Q01)
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?