【发布时间】:2020-09-11 15:06:21
【问题描述】:
我尝试使用filter != 创建一个函数,但它不起作用。不知道是不是和tidy评估有关。
这是我尝试过的:
library(haven)
library(dplyr)
library(labelled)
library(sjlabelled)
data <- read_spss("http://staff.bath.ac.uk/pssiw/stats2/SAQ.sav")
data$Q01_L <- as_label(data$Q01)
这是我尝试编写的函数:
bar_plot <- function(data, var) {
var <- rlang::ensym(var)
data %>%
filter(!var == "Neither") %>%
ggplot(aes(!!var)) +
geom_bar() +
coord_flip() +
theme_classic() +
labs(x = "Question", y = "Count", title = var_label(data$var))
}
bar_plot(data, Q01_L)
我想要实现的是删除“Neither”值,我使用filter(!var == "Neither") 尝试了这个,但这不起作用,我仍然绘制“Neither”。我也失去了图表的标题。
这就是我想要实现的目标:
我可以用几行代码做到这一点:
data %>%
filter(!Q01_L == "Neither") %>%
ggplot(aes(Q01_L)) +
geom_bar() +
coord_flip() +
theme_classic() +
labs(x = "Question", y = "Count", title = var_label(data$Q01_L))
但我不知道如何将其转换为函数。
【问题讨论】:
-
@Typer Writer 我强烈建议阅读advanced R 中有关元编程的章节,并看看如何具体了解use the new evaluation style in
dplyr -
我正在尝试将此过程
data$Q01_L <- as_label(data$Q01)包含在此问题的函数中:stackoverflow.com/questions/63851542/…。