使用R中的igraph打印具有节点度的边列表

时间:2014-02-11 04:46:53

标签: r igraph

我是使用igraph和R的新手,并希望执行以下操作:

1)计算路径长度分布。我可以使用库中的直接函数找到平均路径长度,但是如何为每对顶点找到它,以便得到路径长度分布?

2)我想找出程度高于邻居的所有节点。我尝试将E()函数与degree()结合起来,但它不起作用。

由于

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

对于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