当执行下面的简单代码以将权重添加到网络中从节点3到节点5的边缘上并查看边缘权重时,它将在此处显示NA值。
g<-make_empty_graph(directed = F)
g<-add.vertices(g,c(10))
g<-add_edges(g,c(3,5))
g<-set_edge_attr(graph = g,name="weight",index = c(3,5),value = 0.3)
E(g)$weight
plot(g)
执行后我得到了
> E(g)$weight
[1] NA
> plot(g)
>
这是一个错误还是我做错了什么?
答案 0 :(得分:1)
问题是您在使用index
时错误地指定了set_edge_attr
参数:
这将产生正确的结果:
g<-make_empty_graph(directed = F)
g<-add.vertices(g,c(10))
g<-add_edges(g,c(3,5))
g<-set_edge_attr(graph = g,name="weight",index = E(g),value = 0.3)
E(g)$weight
plot(g)
从?set_edge_attr
中可以看到:
index:可选的边序列,用于设置的子集的属性 边缘
现在,让我们说您有另一条边,并希望将其设置为10:
g<-make_empty_graph(directed = F)
g<-add.vertices(g,c(10))
g<-add_edges(g,c(3,5))
g<-add_edges(g,c(4,5))
g<-set_edge_attr(graph = g,name="weight",index = E(g)[1],value = 0.3)
g<-set_edge_attr(graph = g,name="weight",index = E(g)[2],value = 10)
E(g)$weight
plot(g)
您将E(g)[1]
用于第一个,将E(g)[2]
用于E(g)
,因为dictionary_list
会按照指定的顺序返回所有边缘的数组(1将为c(3,5)和2将是c(4,5))
最好!