选择在igraph R中具有特定边权重的邻域

时间:2013-12-04 11:59:46

标签: r igraph

我有一个加权的无向网络,权重为1和2.我需要选择距离最远5步的所有顶点的邻居。然而,5个步骤应包括2个边缘,权重= 2。例如,如果所有5个边都具有权重1,则应排除这些邻居。 问题:如何选择与特定边权重相关的邻居?

代码:

matrix= matrix(as.integer(runif(100,0,3)), 10, 10)
matrix
ntwrk=graph.adjacency(matrix,weighted=TRUE, mode="undirected")
neighborhood(ntwrk,5)

现在,我需要弄清楚其中哪一个包含权重= 2的边。然后,我需要只保留那些邻居,并用neighborhood.size

测量邻域大小

1 个答案:

答案 0 :(得分:1)

neighborhood的结果是边列表的列表。您可以使用lapply并使用属性权重过滤每个列表。

res.tokeep <- lapply(res, function(x) which(E(ntwrk)[x]$weight==2))

这是一个完整的例子,我在重量过滤器之前和之后绘制图形。

library(igraph)
set.seed(1)
mat = matrix(as.integer(runif(10*10,0,3)), 10, 10)

ntwrk=graph.adjacency(mat,weighted=TRUE, mode="undirected")
res <- neighborhood(ntwrk,5)
op <- par(mfrow=c(1,2))
E(ntwrk)$label <- E(ntwrk)$weight
plot(ntwrk)
res.tokeep <- lapply(res, function(x) which(E(ntwrk)[x]$weight==2))
res.todelete <- lapply(res, function(x) which(E(ntwrk)[x]$weight!=2))

ntwrk <- delete.vertices(ntwrk, unique(unlist(res.todelete)))
plot(ntwrk)

par(mfrow=op)

enter image description here