【发布时间】:2021-06-10 09:00:41
【问题描述】:
我想在循环中包含子设置以生成多个 ggplots使用 R。我尝试调整其他帖子中建议的解决方案,但没有奏效。
name char stat z
n1 c1 2.1 1
n1 c2 1.9 2
n1 c3 2.0 4
n1 c4 3.4 4
n2 c1 1.1 2
n2 c2 1.2 1
n2 c3 2.0 3
n2 c4 1.8 4
n3 c1 5.1 2
n3 c2 3.3 3
n3 c3 4.7 1
n3 c4 0.5 2
最多 n12(可能更多)。
目前我根据我需要的名称手动对数据框进行子集化并生成其绘图:
n1 <- df[df$name=="n1",]
p1 <- ggplot(n1, aes(x=char, y=stat)) +
geom_col(fill = palette[n1$z])
p1
有没有办法创建一个循环,自动将 df 子集化为 n1/n2/n3 并创建 p1/p2/p3,以便我可以单独导出它们或将它们包装成单个图像?
我试过了:
for (i in df$name) {
ggplot(df[df$name[i]], aes(x=char, y=stat))
}
但它会返回
Error: Can't use NA as column index with `[` at positions 1, 2, 3, 4, 5, and 16 more.
同样,我尝试创建一个函数,以便可以使用 lapply 循环它:
draft <- function(var) {
ggplot(var, aes(x=char, y=stat))
}
draft(n1)
但它会返回
Error in ggplot(var, aes(x = char, y = stat)) :
object 'n1' not found.
我尝试调整其他一些解决方案,但 - 仍然 - 它不起作用。你有什么建议吗?
【问题讨论】: