【发布时间】:2019-12-14 06:48:30
【问题描述】:
我有一个数据集,我需要根据不同的列生成多个图,所以我尝试编写一个函数,而不是复制/粘贴,我在其中将数据框和列名传递给函数。我很确定这需要一个 quosure,但我似乎无法让它在 ggplot2 中工作。
理想情况下,我将能够传递数据框、RawData 和列名(在本例中为 B),它会使用 B 列生成条形图,并在图上包含 B 列标签。例如。
RawData = data.frame(A = runif(12, 0, 5), B = LETTERS[seq(1,4)], C = letters[seq(3,1)])
ggplot(RawData, aes(x=A,y=B))+
geom_bar(stat="identity",position="dodge")+
xlab("Group")+ylab("B")
我写的函数实际上是这个......
PlotFn = function(df, VarName) {
VarName = quo(VarName)
ggplot(df, aes(x=A,y=!!VarName))+
geom_bar(stat="identity",position="dodge")+
xlab("Group")+ylab(as_label(!!VarName))
}
PlotFn(RawData, B)
哪个会引发错误:
错误:只能在 quasiquotation 上下文中取消引用。
# 不好: 列表(!!myquosure)
# 好: dplyr::mutate(data, !!myquosure)
理想情况下,我可以让我的绘图功能运行
PlotFn(RawData, B)
PlotFn(RawData, C)
并给出适当标记的条形图,就像这里的那样。
【问题讨论】: