如何用igraph实现二部图投影并添加记录中间连接节点的边属性
igraph 原生支持该需求,只需在调用bipartite_projection时开启保留共同节点的参数即可,无需额外手动计算。
完整实现代码
require(igraph) set.seed(123) # 生成示例二部图 g <- sample_bipartite(5, 5, p = .5) V(g)$name <- c(letters[1:5], 1:5) # 投影时开启保留共同节点参数 # 注意:旧版igraph需将参数改为keep.common.vertices = TRUE proj_result <- bipartite_projection(g, keep_common = TRUE) g1 <- proj_result[[1]] g2 <- proj_result[[2]] # 可选:将共同节点的内部ID转为自定义的name属性,方便直接读取 E(g1)$common_node_names <- lapply(E(g1)$common_vertices, function(x) V(g)$name[x]) E(g2)$common_node_names <- lapply(E(g2)$common_vertices, function(x) V(g)$name[x])
结果验证示例
比如查看g1(字母节点投影图)中a节点和c节点的关联中间节点:
E(g1)[a %--% c]$common_node_names
运行后输出的列表就是两个节点共同连接的数字节点,和手动标注的关联信息完全一致。
补充说明
g1是原二部图中第一类节点(正方形标记的a-e字母节点)的投影图,边属性common_node_names存储两个字母节点通过哪些数字节点建立关联g2是原二部图中第二类节点(圆形标记的1-5数字节点)的投影图,边属性common_node_names存储两个数字节点通过哪些字母节点建立关联
内容的提问来源于stack exchange,提问作者Zlo
相关产品推荐
相关产品推荐

