我正在尝试使用ggplot2编程绘制分布图。
我无法弄清楚如何在这里使用非标准评估(NSE)(即使在阅读了Hadley的书章节等关于NSE的内容之后)。
请考虑以下代码:
library(ggplot2)
gg_dens <- function(x){
eval(ggplot(data.frame(x), aes_string(x = substitute(x))) + geom_density() +
ggtitle(substitute(x)), data.frame(x))
}
lapply(mtcars, function(x) gg_dens(x))
这段代码确实生成了多个密度图,每一列都有一个。但是,它没有打印出正在绘制的变量名称。相反,印出了占位符变量
x
(参见图)。
我的目标是将 x
引号替换为实际的变量名,例如,mpg
。
aes_string()
可以大大帮助变量替换。 - hrbrmstrx
是一个无名原子向量。它没有名称可以用于substitute
。 - LyzandeRgg_dens <- function(myData, myCol){...}
,然后使用aes_string
来处理myCol
,同时将其用于绘图标题,这样不是更好吗? - zx8754mapply(gg_dens, df, colnames(df))
的东西,而函数定义为gg_dens <- function(data, title){}
。 - Roman