我有一个加权的无向网络,权重为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
测量邻域大小答案 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)