如何将R语言igraph关联矩阵转为同节点的有向图对象?
解决igraph中关联矩阵同名行/列节点合并的问题
这个问题的核心在于graph_from_incidence_matrix的设计初衷——它是用来创建二分图的,会自动把行节点和列节点划分为两个独立的节点集合,哪怕名字完全相同也会被当成不同节点。要实现你想要的“同名行/列视为同一节点+生成有向边”的效果,我们需要换个思路:把这个矩阵当作邻接矩阵来处理,用graph_from_adjacency_matrix函数来创建图。
具体步骤代码
首先先运行你提供的矩阵生成代码:
library(igraph) # 生成5×5的0-1矩阵 inc <- matrix(sample(0:1, 15, repl=TRUE), 5, 5) colnames(inc) <- letters[1:5] rownames(inc) <- letters[1:5]
接下来直接用邻接矩阵函数创建有向图:
# 创建有向图,mode指定为"directed"表示行到列的有向边 g <- graph_from_adjacency_matrix(inc, mode = "directed", weighted = NULL)
验证结果
你可以查看图的节点和边,确认效果:
# 查看节点(应该只有a-e五个节点,没有重复) V(g)$name # 查看有向边(形式为a->b、c->d等) E(g)
额外说明
- 如果你的需求是无向边,可以把
mode参数改成"undirected"; weighted = NULL是为了让矩阵中的1只作为“存在边”的标识,而不是边的权重,如果需要保留权重可以去掉这个参数。
内容的提问来源于stack exchange,提问作者Daten Sammel
相关产品推荐
相关产品推荐

