我有这个代码,工作得很好。基本上,它所做的是通过该州的所有州和议会来绘制每个州和议会的图:
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
Etc在所有州/商会中都适用,但在本例中,突出显示适用于AK Upper,但不适用于AK Lower。所以基本上,当循环到达AK下限时,我只需要它忽略这一秒
几何点
因为空子集将导致它出错。有什么想法吗?