在函数 dplyr 中将变量名转换为字符串

Jua*_*n C 3 r ggplot2 tidyeval

我正在做一些有点简单的事情,但 tidyeval 总是让我困惑。在本例中,我有一个可以绘制某些内容的函数,并且之后我还想使用我正在绘制的列的名称来保存它,如下所示:

bar_plot= function(table, col_plot){
    ggplot(table, aes(x=region,
                    y= {{col_plot}})) + 
geom_bar(stat = "identity", fill="steelblue") +
     ggsave(glue('results/{col_plot}.png'))
  
}
Run Code Online (Sandbox Code Playgroud)

该图没有问题,但我无法保存它(找不到该对象,因为它没有将其作为字符串读取)。尝试使用、、、quo但没有任何效果。在函数内将变量名转换为字符串的方法是什么?enquosym

对于可重复性来说,这已经足够了:

df = data.frame(region = c(1, 2), mean_age = c(20, 30))
Run Code Online (Sandbox Code Playgroud)

谢谢 !

All*_*ron 5

你可以这样做:

bar_plot <- function(table, col_plot) {
  
  p <- ggplot(table, aes(region, {{col_plot}})) + geom_col(fill = "steelblue")
  
  ggsave(paste0('results/', deparse(substitute(col_plot)), '.png'), p)
  
}

bar_plot(df, mean_age)
Run Code Online (Sandbox Code Playgroud)

所以你有了:

./结果/mean_age.png

在此输入图像描述

  • @JuanC是的,因为ggplot2版本3.0`.data[[col_plot]]`是在ggplot中使用字符串列名称的好方法。`aes_string` 已被软弃用。这也是[建议在包中使用ggplot](https://ggplot2.tidyverse.org/articles/ggplot2-in-packages.html)的方式。 (2认同)