Я не знаю, является ли это опечаткой или вы используете другую версию, но я не могу найти функцию shortest_path()
, только ту, которую вы упомянули позже: shortest_paths()
.
Если я правильно понимаю, вы хотите извлечь точные последовательности кратчайших путей из списка вершин (список списков, содержащих вершины) и преобразовать его в DF.
Вот мое решение:
library('igraph')
set.seed(24)
g <- as.undirected(barabasi.game(20, power = 0.5, m = 4))
results <- sapply(V(g), function(x){ all_shortest_paths(g, from = x, to = V(g)[-x])$res})
results <- unlist(results, recursive = F)
results <- sapply(results, as_ids)
result_df <- as.data.frame(matrix(results))
Я извлек кратчайшие пути, вызвав all_short all_shortest_paths
для каждой вершины, где параметр из является текущей вершиной, а параметр от до - это список других вершины минус текущая. Для данной структуры необходим только атрибут res .
Это дало мне многомерный список: списки списков вершин (каждый кратчайший путь из заданной вершины) для каждого узла.
...
[[15]]
[[15]][[1]]
+ 3/20 vertices, from 84297ee:
[1] 15 14 1
[[15]][[2]]
+ 3/20 vertices, from 84297ee:
[1] 15 7 1
[[15]][[3]]
+ 3/20 vertices, from 84297ee:
[1] 15 5 1
[[15]][[4]]
+ 3/20 vertices, from 84297ee:
[1] 15 8 2
...
Как только я исключил из списка один его слой, я получил внутренний список вершин. Это структура igraph.vs , и вы должны преобразовать ее с помощью функции sapply(,as_ids)
, как упоминалось здесь .
После этого шага вы можете продолжить работу со своим простым списком списков имен вершин, преобразовав их в data.frame