在函数 dplyr 中将变量名转换为字符串
Turn variable name into string inside function dplyr
我正在做一些简单的事情,但 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'))
}
情节没有问题,但我无法保存它(找不到对象,因为它没有将其作为字符串读取)。尝试使用 quo
、enquo
、sym
,但没有任何效果。有什么方法可以在函数内部把我的变量名变成字符串?
为了可重复性,这就足够了:
df = data.frame(region = c(1, 2), mean_age = c(20, 30))
谢谢!
你可以这样做:
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)
所以你有:
./results/mean_age.png
把绘图部分抽象出来,重点放在文件名上,我想你也可以在这里使用rlang::as_name
将符号转换成你需要的字符串。
library(ggplot2)
df <- data.frame(region = c(1, 2), mean_age = c(20, 30))
bar_plot <- function(table, col_plot) {
# ggplot(table, aes(
# x = region,
# y = {{ col_plot }}
# )) +
# geom_bar(stat = "identity", fill = "steelblue")
filename <- glue::glue("results/{rlang::as_name(enquo(col_plot))}.png")
filename
}
bar_plot(df, mean_age)
#> results/mean_age.png
请注意,我们需要做两件事:首先将参数 col_plot
包装在 enquo
中,因此我们得到 mean_age
而不是字面上的 col_plot
。然后用as_name()
转换,把mean_age
变成"mean-age"
.
我正在做一些简单的事情,但 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'))
}
情节没有问题,但我无法保存它(找不到对象,因为它没有将其作为字符串读取)。尝试使用 quo
、enquo
、sym
,但没有任何效果。有什么方法可以在函数内部把我的变量名变成字符串?
为了可重复性,这就足够了:
df = data.frame(region = c(1, 2), mean_age = c(20, 30))
谢谢!
你可以这样做:
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)
所以你有:
./results/mean_age.png
把绘图部分抽象出来,重点放在文件名上,我想你也可以在这里使用rlang::as_name
将符号转换成你需要的字符串。
library(ggplot2)
df <- data.frame(region = c(1, 2), mean_age = c(20, 30))
bar_plot <- function(table, col_plot) {
# ggplot(table, aes(
# x = region,
# y = {{ col_plot }}
# )) +
# geom_bar(stat = "identity", fill = "steelblue")
filename <- glue::glue("results/{rlang::as_name(enquo(col_plot))}.png")
filename
}
bar_plot(df, mean_age)
#> results/mean_age.png
请注意,我们需要做两件事:首先将参数 col_plot
包装在 enquo
中,因此我们得到 mean_age
而不是字面上的 col_plot
。然后用as_name()
转换,把mean_age
变成"mean-age"
.