r - ggplot2:将变量移交给函数(非标准评估)
问题描述
我正在尝试编写一个函数,其中一个分组变量被移交给一个 ggplot2 表达式。
# sample data
df <- data.frame(x = rep(1:20, 5), y = rnorm(100),
grp1 = c(rep("A", 20), rep("B", 20), rep("C", 20), rep("D", 20), rep("E", 20)),
grp2 = c(rep("X", 50), rep("Y", 50)),
stringsAsFactors = TRUE)
这有效
g <- ggplot(df, aes(x, y, color = grp1)) +
geom_line()
print(g)
这不起作用
plot_this <- function(mydf, mygroup) {
g <- ggplot(mydf, aes(x, y, color = mygroup)) +
geom_line()
}
p <- plot_this(df, grp2)
print(p)
Error in FUN(X[[i]], ...) : object 'grp2' not found
这也不起作用(受 dplyr 启发)
plot_this <- function(mydf, mygroup) {
mygroup <- enquo(mygroup)
g <- ggplot(mydf, aes(x, y, color = (!! mygroup))) +
geom_line()
}
p <- plot_this(df, grp2)
print(p)
Error in FUN(X[[i]], ...) : object 'grp2' not found
解决方案
我错过了整洁的评估:
plot_this <- function(mydf, mygroup) {
mygroup <- enquo(mygroup)
g <- ggplot(mydf, aes(x, y, color = {{mygroup}})) +
geom_line()
}
p <- plot_this(df, grp2)
print(p)
推荐阅读
- php - ExportMenu Kartik PDF 文件生成 - 太慢 - 如何优化它?
- javascript - 如何清除 v-data-table 中的选定行,Vuetify
- node.js - 有没有办法将用python(scikit-learn)编写的机器学习pickle文件传输到node.js中?
- c++ - pid存储在哪里?
- c# - 在 WPF 默认 DataGrid 中使用 Telerik ComboBox 作为 DataTemple 列绑定问题
- javascript - 渲染 HTML 符号
- excel - 基于另一个工作表 Excel 中的数据的条件格式
- windows - Windows 批处理脚本:如何从 ftype 命令输出中仅提取文件名
- jquery - Bootstrap 的数据切换和 JQuery 代码不能一起工作
- powerbi - 向条形图添加多个值