如何使用R igraph

时间:2019-08-15 20:27:50

标签: r igraph

我使用all_shortest_paths函数来识别给定两个顶点的所有最短路径。

我不知道它们之间的区别,但是以下两个函数给我相同的结果

all_shortest_paths(g, 1,3)
get.all.shortest.paths(g, 1,3)

这是结果

$res
$res[[1]]
+ 3/9 vertices, from a86e634:
[1] 1 4 3

$res[[2]]
+ 3/9 vertices, from a86e634:
[1] 1 2 3


$nrgeo
[1] 1 1 2 1 1 0 1 1 1

现在,我想获取在没有源节点和宿节点的路径中访问的节点。例如,我得到第一个最短的路径。

> all_shortest_paths(g, 1,3)$res[1]
[[1]]
+ 3/9 vertices, from a86e634:
[1] 1 4 3`

如何存储除源节点和宿节点(即1,3)之外的已访问节点?当我分配a<- all_shortest_paths(g, 1,3)$res[1]时,它的类型看起来像列表,但是无论我做什么,我都无法访问4。它不断返回我+ 3/9 vertices, from a86e634: [1] 1 4 3

1 个答案:

答案 0 :(得分:2)

您需要再向下移动all_shortest_paths返回的列表。在下面的代码中,我创建了变量n,以使其更具可读性。

library(igraph)

g <- make_graph("Cubical")

p <- all_shortest_paths(g, 1, 3)

n <- length(p[[1]][[1]])
p[[1]][[1]][-c(1, n)]
#+ 1/8 vertex, from 0de75ff:
#[1] 4

要一次性获得所有内部顶点,请在lapply上使用p[[1]]

lapply(p[[1]], function(.p){
  n <- length(.p)
  .p[-c(1, n)]
})
#[[1]]
#+ 1/8 vertex, from 0de75ff:
#[1] 4
#
#[[2]]
#+ 1/8 vertex, from 0de75ff:
#[1] 2

此代码不依赖于内部顶点的数量,可以看出源和宿分别为1和7。
这次是单线。
(输出省略。)

p2 <- all_shortest_paths(g, 1, 7)

lapply(p2[[1]], function(.p) .p[-c(1, length(.p))])