8

首先,我对 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 个数字是不可行的,因此必须自动化。

任何帮助将不胜感激,这似乎是一个新手问题,我有点新手用户。

4

2 回答 2

15

您可以使用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
于 2013-11-15T08:57:46.353 回答
3

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

which.max(path.length.hist(g)$res)
于 2013-11-15T08:49:17.393 回答