我经常在工作中使用ggplot2并构建包装函数以加快我的工作流程。使用非标准评估(NSE)aes
迫使我使用实际的变量名而不是传递字符串。所以我复制并重命名数据帧和变量名以安抚ggplot2。必须有一个更好的方法。如何通过函数包装器使ggplot2接受未知的数据帧和列名,而无需复制数据帧并使用通用列名?
这有效:
ggplot(mtcars, aes(x=mpg, y=hp)) +
geom_point()
这不是:
FUN <- function(dat, x, y) {
ggplot(dat, aes(x = x, y = y)) +
geom_point()
}
FUN(mtcars, "mpg", "hp")
答案 0 :(得分:34)
有aes_string
函数,我没有看到它突出显示,这正是这样:
FUN <- function(dat, x, y) {
ggplot(dat, aes_string(x = x, y = y)) +
geom_point()
}
FUN(mtcars, "mpg", "hp")
答案 1 :(得分:1)
现在推荐使用.data
代词
FUN <- function(dat, x, y) {
ggplot(dat, aes(x = .data[[x]], y = .data[[y]])) +
geom_point()
}
FUN(mtcars, "mpg", "hp")
其他几种选择 -
#Using get
FUN <- function(dat, x, y) {
ggplot(dat, aes(x = get(x), y = get(y))) +
geom_point()
}
#Using sym
FUN <- function(dat, x, y) {
ggplot(dat, aes(x = !!sym(x), y = !!sym(y))) +
geom_point()
}