R: вернуть список ребер всех простых путей

Я пытаюсь получить списки краев путей между двумя узлами с помощью тидиграфа. Вот пример

      demo <- tbl_graph(nodes = tibble(name = c("A", "B", "C", "D")),
                       edges = tribble(~from, ~to,~id,
                                       "B", "A", "1",
                                       "D", "C", "2",
                                       "A", "D", "3",
                                       "A", "C", "4"),
                   node_key = "name")

Я использовал all_simple_paths из пакета igraph, чтобы получить все возможные пути между узлом B и узлом C.

      paths <- all_simple_paths(demo, "B", "C")
#[[1]]
#+ 3/4 vertices, named, from e0c8c2e:
#[1] B A C

#[[2]]
#+ 4/4 vertices, named, from e0c8c2e:
#[1] B A D C

Интересно, как сгенерировать списки ребер для всех простых путей. Спасибо.

      [1] 1 4
[2] 1 3 2

1 ответ

Решение

Попробуйте код ниже

      lapply(
  all_simple_paths(demo, "B", "C"),
  function(x) {
    E(demo)[get.edge.ids(demo, c(rbind(head(x, -1), x[-1])))]
  }
)

который дает

      [[1]]
+ 2/4 edges from d776b98 (vertex names):
[1] B->A A->C

[[2]]
+ 3/4 edges from d776b98 (vertex names):
[1] B->A A->D D->C
Другие вопросы по тегам