При выполнении приведенного ниже простого кода для добавления веса ребру от узла 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)
>
Это баг или я что-то не так делаю?





Проблема в том, что вы неправильно указали аргумент 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: An optional edge sequence to set the attributes of a subset of edges
Итак, теперь предположим, что у вас есть другое ребро и вы хотите установить для него значение 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) возвращает вам массив всех ваших ребер в том порядке, в котором вы их указали (1 будет c (3,5) и 2 будет c (4,5))
Лучший!