Reputation: 1880
This is related to this question. I have a very large graph, on the order of 100,000 vertices in igraph. Each vertex has an attribute att
which is a logical value. Edges are weighted with positive integer weights. For each vertex v, I would like to sum the edge weights of edges that connect v
to a vertex where att=T
.
We can use the following as an example
set.seed(42)
g <- erdos.renyi.game(169081, 178058, type="gnm")
V(g)$att <- as.logical(rbinom(vcount(g), 1, 0.5))
Upvotes: 2
Views: 542
Reputation: 22496
Here's one way to get, for each vertex v,
the sum of edge weights of neighboring vertices with att=T
. Gabor might have a more elegant way that is much faster.
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)
Upvotes: 1