计算邻域中有多少顶点具有给定属性,在igraph中具有边缘权重

时间:2014-04-19 03:28:43

标签: r igraph

这与此question有关。我有一个非常大的图形,igraph中有100,000个顶点。每个顶点都有一个属性att,它是一个逻辑值。边缘用正整数权重加权。对于每个顶点v,我想将v连接到att=T的顶点的边的边权重相加。

我们可以使用以下作为示例

set.seed(42)
g <- erdos.renyi.game(169081, 178058, type="gnm")
V(g)$att <- as.logical(rbinom(vcount(g), 1, 0.5))

1 个答案:

答案 0 :(得分:1)

这是为每个顶点v,获取具有att=T的相邻顶点的边权重之和的一种方法。 Gabor可能会有更优雅的方式,速度更快。

library(igraph)
set.seed(42)
g <- erdos.renyi.game(169081, 178058, type="gnm")
V(g)$att <- as.logical(rbinom(vcount(g), 1, 0.5))
E(g)$weight <- sample(10, ecount(g), replace=TRUE) #integer weights

sumEdgeWeightsOfEdgesFromVertexV<- function(v){
  totwt <- 0
  #get all neighbors of vertex v
  all_neighbors_of_v <- V(g)[nei(v)]
  #subset to those with att to be TRUE
  att_nei <- as.vector(all_neighbors_of_v[all_neighbors_of_v$att==TRUE])
  #sum all the weights, edge by edge
  for( ver in att_nei) {
    totwt <- totwt + E(g, c(v,ver))$weight
  }
  totwt
}  

# sapply(V(g), sumEdgeWeightsOfEdgesFromVertexV)