使用igraph / R查找所有最短路径

时间:2013-11-15 08:15:00

标签: r graph igraph

首先,我对R不是很精通,但我有一个100个节点的网络,我正在进行分析。我想找到网络中每对节点之间的所有最短路径(100次计算),诀窍是将它们作为整数返回,路径长度如果你愿意的话。

#construct a small sample of the graph
g = graph.formula('insert graph') 

#use the function to retrieve shortest paths from a single vertex
get.all.shortest.paths(g, 1, to = V(g))

#output
$res
$res[[1]]
[1] 1

$res[[2]]
[1] 1 2

$res[[3]]
[1] 1 2 3

$res[[4]]
[1] 1 2 3 4

$res[[5]]
[1] 1 2 3 4 5

$res[[6]]
[1]  1 10  9  8  7  6

$res[[7]]
[1] 1 2 3 4 5 6

$res[[8]]
[1]  1 10  9  8  7

$res[[9]]
[1]  1 10  9  8

$res[[10]]
[1]  1 10  9

$res[[11]]
[1]  1 10


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

虽然这很好但手动迭代所有100个节点是不切实际的。有没有办法实现自动化?我的问题的第二个组成部分是我希望将每个路径输出为数字,如路径长度,而不是给出实际路径。我想要的另一件事是计算模式路径长度(或在网络中更常见的路径长度)。查看100个数字是不可行的,因此必须自动化。

任何帮助都会被彻底欣赏,这似乎是一个新手问题,我有点像新手用户。

2 个答案:

答案 0 :(得分:12)

您可以使用shortest.paths返回每个节点之间距离的矩阵:

distMatrix <- shortest.paths(g, v=V(g), to=V(g))

结果:

      cdc42 ste20 mkk2 bul1 mth1 vma6 vma2  ... 
cdc42     0     1  Inf  Inf    4    3    2  
ste20     1     0  Inf  Inf    3    2    1  
mkk2    Inf   Inf    0    1  Inf  Inf  Inf  
bul1    Inf   Inf    1    0  Inf  Inf  Inf  
mth1      4     3  Inf  Inf    0    1    2  
vma6      3     2  Inf  Inf    1    0    1
vma2      2     1  Inf  Inf    2    1    0  
...      

访问它非常容易:

# e.g. shortest path length between the second node and the fifth
distMatrix[2,5]
>
[1] 3

# or using node names:
distMatrix["ste20", "mth1"]
>
[1] 3

答案 1 :(得分:3)

如果您只想要长度,则应使用path.length.hist。要获得该模式,只需使用

which.max(path.length.hist(g)$res)