【发布时间】:2023-03-20 09:45:02
【问题描述】:
我是使用 igraph 和 R 的新手,想要做以下事情:
1) 计算路径长度分布。我可以使用库中的直接函数找到平均路径长度,但是如何为每对顶点执行此操作,以便获得路径长度分布?
2) 我想找出所有度数高于邻居的节点。我尝试将 E() 函数与 degree() 结合使用,但它不起作用。
谢谢
【问题讨论】:
我是使用 igraph 和 R 的新手,想要做以下事情:
1) 计算路径长度分布。我可以使用库中的直接函数找到平均路径长度,但是如何为每对顶点执行此操作,以便获得路径长度分布?
2) 我想找出所有度数高于邻居的节点。我尝试将 E() 函数与 degree() 结合使用,但它不起作用。
谢谢
【问题讨论】:
对于 2),它实际上更简单、更快并且在我看来更易读:
g <- graph.formula(1-2-3-4, 2-5)
degs <- degree(g)
sapply(V(g), function(x) all(degs[neighbors(g, x)] < degs[x]))
# [1] FALSE TRUE FALSE FALSE FALSE
【讨论】:
1) 可以使用path.length.hist解决:
g <- graph.data.frame(data.frame(a=c(1:3),b=c(2:4)),directed=FALSE)
plot(g)
## (1)--(2)--(3)--(4)
out <- path.length.hist(g,directed=FALSE)
out
#$res
#[1] 3 2 1
#
#$unconnected
#[1] 0
所以out$res 给出了 3 条长度==1 的路径、2 条长度==2 和 1 条长度==3 的路径,这本质上是直方图/条形图数据。如有必要,您可以扩展以获得表示分布的向量,例如:
rep(seq_along(out$res),out$res)
#[1] 1 1 1 2 2 3
签出:
mean(rep(seq_along(out$res),out$res))
#[1] 1.666667
average.path.length(g)
#[1] 1.666667
2) - 可能是这样的:
g <- graph.data.frame(data.frame(a=c(1:3,2),b=c(2:4,5)),directed=FALSE)
# node 2 has a higher degree than its neighbours
sapply(
neighborhood(g,order=1),
function(x) {degs <- degree(g,x); all(degs[1] > degs[-1]);}
)
#[1] FALSE TRUE FALSE FALSE FALSE
【讨论】: