Как извлечь атрибуты ребра из кратчайшего пути ориентированного графа: - PullRequest
0 голосов
/ 24 мая 2018

Я новичок в графиках и ожидаю, что это что-то довольно простое.

У меня есть ориентированный граф (гидрологическая сеть), и я хочу получить атрибут с краев по кратчайшему пути.Например:

library(igraph)
gdf <- data.frame(from = c(1,2,3,5), to = c(2,3,4,3), id = c("A","B","C","D"))
g <- graph_from_data_frame(gdf, directed = TRUE)
idx <- shortest_paths(g, 1, 3, output = "epath")$epath[[1]]
igraph::edge_attr(g, "id", idx)

Что возвращает:

[1] "A" "B"

Если я хочу получить метки для кратчайшего пути к концу сети:

idx <- shortest_paths(g, 1, 4, output = "epath")$epath[[1]]
igraph::edge_attr(g, "id", idx)

Я получаю:

Warning message:
In shortest_paths(g1, 1, 4, output = "epath") :
  At structural_properties.c:740 :Couldn't reach some vertices

И idx это:

+ 0/4 edges from b8aaa81 (vertex names):

Для этого последнего я бы ожидал получить [1] "A" "B" "C"

Как мнеполучить метки для кратчайшего пути, который включает в себя конечную вершину графа?

1 Ответ

0 голосов
/ 24 мая 2018

Проблема в том, как вы обращаетесь к вершинам.Обратите внимание, что идентификаторы вершин не совпадают с метками вершин.

vertex_attr(g)
$name
[1] "1" "2" "3" "5" "4"

Когда вы пишете shortest_paths(g, 1, 4, output = "epath")$epath[[1]]

Это займет первый и четвертый узлы с метками «1» и «5».Это терпит неудачу, потому что нет пути от «1» до «5».Я полагаю, вы имели в виду

idx <- shortest_paths(g, "1", "4", output = "epath")$epath[[1]]
igraph::edge_attr(g, "id", idx)
[1] "A" "B" "C"

`

...