【发布时间】:2018-11-23 16:30:00
【问题描述】:
有时在执行探索性分析或生成报告时,我们希望绘制许多变量的单变量分布。经过一些整洁的技巧后,我可以在情节上做这件事,但是有有序的因素,我想让它们在情节上保持有序。
因此,为了以更有效的方式完成它,我构建了一个简单的基于dplyr/ggplot 的函数。我使用vcd包的关节炎数据集在下面做了这个例子。
library(dplyr)
library(ggplot2)
data(Arthritis, package = "vcd")
head(Arthritis)
plotUniCat <- function(df, x) {
x <- enquo(x)
df %>%
filter(!is.na(!!x)) %>%
count(!!x) %>%
mutate(prop = prop.table(n)) %>%
ggplot(aes(y=prop, x=!!x)) +
geom_bar(stat = "identity")
}
plotUniCat(Arthritis, Improved)
我可以用很短的方式绘制格式化图表,这很酷,但只有一个变量。
我尝试使用 for 循环调用多个变量,但它不起作用。代码运行,但没有任何反应。
variables <- c("Improved", "Sex", "Treatment")
for (i in variables) {
plotUniCat(Arthritis, noquote(i))
}
我对此进行了搜索,但我仍然不清楚。有人知道我做错了什么或如何使它起作用吗?
提前致谢。
【问题讨论】:
-
可能会发生一些事情。在情节调用周围打印: print(plotUniCat(Arthritis, noquote(i)) )
-
使用
print()语句是@HarlanNelson 解决方案的一部分。这是最简单的方法,但前提是我与其他人提出的rlang::sym()解决方案混合使用。如果我不将quo()更改为sym(),则会返回“提供给连续刻度的离散值”错误。谢谢兄弟!