gpt4 book ai didi

r - 使用 dplyr/ggplot 函数在 for 循环中调用多个变量

转载 作者:行者123 更新时间:2023-12-04 17:15:19 24 4
gpt4 key购买 nike

有时在执行探索性分析或生成报告时,我们希望绘制许多变量的单变量分布。经过一些整洁的技巧后,我可以对情节进行此操作,但是有有序的因素,我想使它们在情节上保持有序。

因此,为了以更有效的方式完成它,我构建了一个简单的 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 循环调用多个变量,但它不起作用。代码运行,但没有任何 react 。
variables <- c("Improved", "Sex", "Treatment")

for (i in variables) {
plotUniCat(Arthritis, noquote(i))
}

我搜索了这个,但对我来说仍然不清楚。有人知道我做错了什么或如何使它起作用吗?

提前致谢。

最佳答案

您需要使用 rlang::sym将字符串转换为符号而不是 enquo .我替换 for循环 purrr::map循环遍历 variables

library(tidyverse)

data(Arthritis, package = "vcd")

head(Arthritis)
#> ID Treatment Sex Age Improved
#> 1 57 Treated Male 27 Some
#> 2 46 Treated Male 29 None
#> 3 77 Treated Male 30 None
#> 4 17 Treated Male 32 Marked
#> 5 36 Treated Male 46 Marked
#> 6 23 Treated Male 58 Marked

plotUniCat2 <- function(df, x) {
x <- rlang::sym(x)
df %>%
filter(!is.na(!!x)) %>%
count(!!x) %>%
mutate(prop = prop.table(n)) %>%
ggplot(aes(y=prop, x=!!x)) +
geom_bar(stat = "identity")
}

variables <- c("Improved", "Sex", "Treatment")

variables %>% purrr::map(., ~ plotUniCat2(Arthritis, .x))
#> [[1]]



#> 
#> [[2]]



#> 
#> [[3]]



创建于 2018-06-13 由 reprex package (v0.2.0)。

关于r - 使用 dplyr/ggplot 函数在 for 循环中调用多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50848273/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com