我有一个名为panel
的数据集,它有多个感兴趣的分类变量。
我想编写一个程序,使用for
循环绘制每对的马赛克图
vars
是具有以下列名称的向量:
vars
[1] "region" "urb" "sex" "race" "grade" "dt01" "dt02" "dt03"
[9] "dt06" "dt07" "exercise" "kq7"
这是我的计划:
library(ggmosaic)
for (i in 1:12){
for (j in 1:12){
a <- vars[i]
b <- vars[j]
if (j > i){
m <- ggplot(data = panel)
m <- m + geom_mosaic(aes(x = product(a), fill = b))
}
print(m)
}
}
这段代码给了我一个大块的情节。
当我像下面的代码一样手动编写列名时,它可以正常工作
ggplot(data = panel) +
geom_mosaic(aes(x = product(region), fill = urb))
我尝试aes_string
,但没有帮助。
答案 0 :(得分:1)
两个需要考虑的建议。
1:生成你的对&amp;使用单个循环来完成它们,而不是通过重复组合的双循环。
vars <- c("region", "urb", "sex", "race", "grade", "dt01",
"dt02", "dt03", "dt06", "dt07", "exercise", "kq7")
vars.pair <- combn(vars, 2, simplify = FALSE) # list of all valid pairs
> head(vars.pair)
[[1]]
[1] "region" "urb"
[[2]]
[1] "region" "sex"
[[3]]
[1] "region" "race"
[[4]]
[1] "region" "grade"
[[5]]
[1] "region" "dt01"
[[6]]
[1] "region" "dt02"
2:在aes_string()
中,确保x的美学映射评估为"product(variable.name)"
而不是product("variable.name")
。
for(i in seq_along(vars.pair)){
p1 <- vars.pair[[i]][1]
p2 <- vars.pair[[i]][2]
m <- ggplot(data = panel) +
geom_mosaic(aes_string(x = paste0("product(", p1, ")"),
fill = p2))
print(m)
}