我在文本文件中有两个动态网络的邻接矩阵,R(igraph)中的第1和第2期。我想以绿色为第二个网络中的新顶点和边缘着色。
例如,第一个网络可能如下所示:
1 3 6 10 11
1 NA NA NA NA NA
3 NA NA NA NA NA
6 NA NA NA 8.695652174 13.04347826
10 NA NA 2.586206897 NA 3.448275862
11 NA NA NA 2.919708029 NA
然后更改为第二个网络:
1 2 3 6 10
1 NA NA NA NA NA
2 NA NA NA NA NA
3 NA NA NA NA NA
6 NA NA NA 12.32091691 8.022922636
10 NA NA 7.228915663 NA NA
要读入的代码:
t1 <- structure(matrix(c(NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,
NA,NA,NA,8.695652174,13.04347826,
NA,NA,2.586206897,NA,3.448275862,
NA,NA,NA,2.919708029,NA),nrow=5, ncol=5, byrow=TRUE),
dimnames=list(c(1,3,6,10,11), c(1,3,6,10,11)))
t2 <- structure(matrix(c(NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,
NA,NA,NA,NA,NA,
NA,NA,12.32091691,8.022922636,NA,
NA,NA,7.228915663,NA,NA),nrow=5, ncol=5, byrow=TRUE),
dimnames=list(c(1,2,3,6,10), c(1,2,3,6,10)))
t3&lt; - 结构(矩阵(c(NA,NA,NA,NA,NA, NA,NA,7.2289,NA,NA, NA,10.4798,NA,NA,NA, NA,NA,8.1364,NA,3.8762, NA,NA,NA,NA,NA),nrow = 5,ncol = 5,byrow = TRUE), dimnames = list(c(1,3,4,6,10),c(1,3,4,6,10)))
如何在R中链接这些网络,以便R知道哪些顶点是新的?
答案 0 :(得分:6)
理想情况下,解决方案是调用graph.union
,但在当前版本中存在一些错误,因此这是一个解决方法。
您正在使用NA
标记丢失的边缘,这有点奇怪,因为NA
表示您不知道边缘是否缺失。我只需用零替换NA
。
t1[is.na(t1)] <- 0
t2[is.na(t2)] <- 0
g1 <- graph.adjacency(t1, weighted=TRUE)
g2 <- graph.adjacency(t2, weighted=TRUE)
## Vertices are easy
V(g2)$color <- ifelse(V(g2)$name %in% V(g1)$name, "black", "darkgreen")
## Edges are a bit trickier
el1 <- apply(get.edgelist(g1), 1, paste, collapse="-")
el2 <- apply(get.edgelist(g2), 1, paste, collapse="-")
E(g2)$color <- ifelse(el2 %in% el1, "black", "green")
plot(g2, vertex.label.color="white", vertex.label=V(g2)$name)