我有很好的这段代码。基本上,它所做的是遍历该状态的所有状态和该房间,以绘制每个状态的图。
lapply(unique(finaldat$st), function(s){
chambs <- unique(finaldat$chamber[finaldat$st == s])
p <- list(NULL)
for(c in 1:length(chambs)){
p[[c]] <- finaldat %>% filter(st == s & chamber == chambs[c]) %>%
ggplot(aes(x = average, y = score, col = color))+
geom_point(aes(size= Total,alpha = 0.5)) +
stat_smooth(method = "lm") +
geom_point(data=subset(finaldat,st==s & chamber == chambs[c] & highlight>0),aes(col="yellow")) +
ggtitle(paste(s,chambs[c],year)) +
scale_size(range = c(.5,3.5)) +
scale_color_manual(labels = c("1","2","3"),
values = c("blue","red","yellow"))
filename = filename <- paste(s,chambs[c],year)
ggsave(paste("Plots/",filename,".png"), width = 10, height = 7)
}
return(p)
})
在前几个州都可以正常工作,但是我在第二行geom_point
中遇到了问题,该行基本上是用黄色突出显示某些人的方式:
... + geom_point(data=subset(finaldat,st==s & chamber == chambs[c] & highlight>0),aes(col="yellow")) + ...
因为它是数据帧的子集,所以此数据有某些迭代,其中该子集变成了一个空数据帧,因为有时highlight
变量中没有人故意将其值设置为大于零,因此我得到错误并停止循环。但是我试图找出一种方法,如果由于该子集为空而出现错误,那么它将忽略那一行。但是我无法找出任何好的ifelse
语句或任何使它发生的东西。
下面是数据的示例:
st chamber average score color Total highlight
AK Upper .64 54 1 849 1
AK Upper .84 91 1 743 0
AK Upper .35 14 2 442 0
AK Upper .95 54 1 641 4
AK Lower .64 54 1 849 0
AK Lower .84 91 1 743 0
AK Lower .35 14 2 442 0
AK Lower .95 54 1 641 0
在所有州/州/省/直辖市/直辖市/直辖市/自治区/直辖市/直辖市/自治区,但在此示例中,突出显示将适用于AK Upper,但不适用于AK Lower。因此,基本上,当循环到达AK Lower时,我只需要忽略第二个geom_point
,因为空子集将导致它出错。有什么想法吗?
答案 0 :(得分:0)
lapply(unique(finaldat$st), function(s){
chambs <- unique(finaldat$chamber[finaldat$st == s])
p <- list(NULL)
for(c in 1:length(chambs)){
p[[c]] <- finaldat %>% filter(st == s & chamber == chambs[c]) %>%
ggplot(aes(x = average, y = score, col = color))+
geom_point(aes(size= Total,alpha = 0.5)) +
stat_smooth(method = "lm") -> gg
if (YOUR TEST HERE) {
gg <- gg + geom_point(data=subset(finaldat,st==s & chamber == chambs[c] & highlight>0),aes(col="yellow")) +
}
gg +
ggtitle(paste(s,chambs[c],year)) +
scale_size(range = c(.5,3.5)) +
scale_color_manual(labels = c("1","2","3"),
values = c("blue","red","yellow"))
filename = filename <- paste(s,chambs[c],year)
ggsave(paste("Plots/",filename,".png"), width = 10, height = 7)
}
return(p)
})