繁体   English   中英

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

[英]choose neighborhood that have specific edge weights in igraph R

我有一个权重为 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)

现在,我需要弄清楚其中哪一个包含 weight=2 的边。 然后,我只需要保留那些邻居,并使用neighbor.size测量邻居大小

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)

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM