R语言igraph调用make_bipartite_graph()报无效顶点ID错误
报错原因
igraph的顶点ID规则为从1起始的连续正整数,不支持跳号的自定义编号。你传入的边向量中存在201这类编号,远大于types向量长度对应的总顶点数122,超出合法顶点ID范围,直接触发报错。
具体问题点
- 自定义节点编号存在断层:节点集1编号为1-103,节点集2编号直接跳到201-211,中间104-200的编号完全空缺,不符合igraph顶点ID连续的要求
- 传入的
types向量长度为122,意味着igraph识别到的总顶点数为122,合法ID范围只能是1~122,边向量里的201远超出这个范围
修复方法
先将跳号的原始节点ID映射为1~122的连续ID,完成图构建后再把原始编号存为顶点属性供后续调用,参考代码:
library(igraph) # 整理节点基础信息 nodeset1 <- 1:103 nodeset2 <- 201:211 all_nodes <- c(nodeset1, nodeset2) # 总长度122,与types向量长度匹配 bipartite_types <- NodesAndType[,2] # 顺序与all_nodes对应:前103个为FALSE,后19个为TRUE # 构建原始ID到连续ID的映射,替换边向量中的编号 id_mapping <- setNames(1:length(all_nodes), as.character(all_nodes)) el_continuous <- unname(id_mapping[as.character(EL_vector)]) # 构建二部图 bipartite_g <- make_bipartite_graph(types = bipartite_types, edges = el_continuous, directed = FALSE) # 将原始编号存为顶点属性,后续分析、可视化可直接调用 V(bipartite_g)$raw_id <- all_nodes
校验方式
构建完成后可运行以下代码确认图结构正确:
# 校验是否为合法二部图 is_bipartite(bipartite_g) # 查看顶点类型与原始编号 V(bipartite_g)$type V(bipartite_g)$raw_id
内容的提问来源于stack exchange,提问作者MarMall
相关产品推荐
相关产品推荐

