【发布时间】:2020-10-02 14:55:50
【问题描述】:
我正在尝试编写一个函数来传递引用的项目以构建多个 ggplots。以下代码效果很好,可以满足我的需求。
fig2.data %>%
ggplot(aes(x = Surgery, y = BALF_Protein, fill = Exposure)) +
stat_summary(geom = "errorbar", fun.data = mean_se, position = "dodge") +
stat_summary(geom = "bar", fun = mean, position = "dodge") +
theme_classic() +
scale_fill_manual(values=c("lightgrey","darkgrey")) +
facet_grid(cols = vars(Duration))
使用this guide我构造了以下函数并调用了该函数。
plotf <- function(x, y, fill, facet){
x_var <- enquo(x)
y_var <- enquo(y)
facet_var <- enquo(facet)
fill_var <- enquo(fill)
ggplot(fig2.data, aes(x = !!x_var, y = !!y_var, fill = !!fill_var)) +
stat_summary(geom = "errorbar", fun.data = mean_se, position = "dodge") +
stat_summary(geom = "bar", fun = mean, position = "dodge") +
theme_classic() +
scale_fill_manual(values=c("lightgrey","darkgrey")) +
facet_grid(cols = vars(!!facet_var))
}
plotf(x = "Surgery", y = "BALF_Protein", fill = "Exposure", facet = "Duration")
我的图形呈现没有错误,但呈现方式不同。 我做错了什么?
【问题讨论】:
-
请分享示例数据以使您的问题可重现
-
在调用函数时尝试不带引号,即plotf(x = Surgery, y = BALF_Protein, fill = Exposure, facet = Duration)
-
使函数使用带引号的变量名的另一个选项是使用
!!sym(varname)或.datapronoun,即.data[[varname]]。在这两种情况下,您都不需要 enquo() 变量。