iGraph R包疑似Bug?设置边权重后显示NA值问题咨询
问题分析与解决
这不是iGraph的Bug哦,是你在设置边属性时用错了set_edge_attr函数的index参数取值~
错误原因
当你通过add_edges(g,c(3,5))添加了一条连接节点3和5的边后,这条边在图中的边索引是1(因为它是图里的第一条边)。而set_edge_attr的index参数需要接收的是边的索引值,不是边连接的节点编号。你传入节点对c(3,5)作为索引,函数找不到对应的边,自然就返回NA了。
正确的三种写法
方法1:使用边的索引值指定
g<-make_empty_graph(directed = F) g<-add.vertices(g,c(10)) g<-add_edges(g,c(3,5)) # 用边的索引1来定位这条边 g<-set_edge_attr(graph = g,name="weight",index = 1,value = 0.3) E(g)$weight # 输出:[1] 0.3 plot(g)
方法2:通过节点对匹配边
可以用iGraph的节点对匹配语法%--%来定位目标边,不用记边索引:
g<-make_empty_graph(directed = F) g<-add.vertices(g,c(10)) g<-add_edges(g,c(3,5)) # 通过节点对3-5匹配对应的边 g<-set_edge_attr(graph = g,name="weight",index = E(g)[3%--%5],value = 0.3) E(g)$weight # 输出:[1] 0.3 plot(g)
方法3:添加边时直接设置属性
更高效的方式是在添加边的同时就指定权重属性:
g<-make_empty_graph(directed = F) g<-add.vertices(g,c(10)) # 添加边时通过attr参数直接设置weight g<-add_edges(g,c(3,5),attr = list(weight = 0.3)) E(g)$weight # 输出:[1] 0.3 plot(g)
内容的提问来源于stack exchange,提问作者user8267234
相关产品推荐
相关产品推荐

