首先,我对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个数字是不可行的,因此必须自动化。
任何帮助都会被彻底欣赏,这似乎是一个新手问题,我有点像新手用户。
答案 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)