R语言igraph中用ego()提取节点n度邻居返回NULL,求错误排查
问题分析与修正
你的代码返回NULL结果,主要是以下三个问题导致的:
ego函数参数顺序错误
igraph的ego()函数参数顺序为ego(graph, order, nodes, ...),你把代表度数的order和目标节点nodes的位置写反了,参数传递不符合函数要求。节点无name属性
你创建的图是用节点编号生成的,默认没有name属性,所以访问$name会直接返回NULL。如果需要使用节点名称,得手动为节点添加name属性,或者直接使用节点编号进行操作。邻居提取逻辑冗余
要获取2度邻居,直接指定order=2即可——ego()会返回包含目标节点、1度邻居、2度邻居的完整集合,不需要手动合并不同order的结果。
修正后的代码
方式1:使用节点编号操作
library(igraph) # 创建图 g <- graph(c(1,2, 1,3, 2,4, 3,4, 4,5, 5,6, 5,7)) # 获取节点1的2度邻居(包含自身) neighbors_degree_2 <- ego(g, order = 2, nodes = 1)[[1]] # 若不需要自身,移除第一个元素 neighbors_degree_2_without_self <- neighbors_degree_2[-1] print(neighbors_degree_2) print(neighbors_degree_2_without_self)
方式2:添加节点名称(模拟John的场景)
library(igraph) # 创建带name属性的友谊关系图 g <- graph(c("John","Alice", "John","Bob", "Alice","Charlie", "Bob","Charlie", "Charlie","David", "David","Eve", "David","Frank")) # 获取John的2度邻居(包含自身) john_neighbors_degree_2 <- ego(g, order = 2, nodes = "John")[[1]] # 去掉John自身 john_neighbors_degree_2_without_self <- john_neighbors_degree_2[-1] print(john_neighbors_degree_2) print(john_neighbors_degree_2_without_self)
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

