我有一个包含600万个节点的图表,例如
require(igraph)
# Graph of 1000 nodes
g <- ba.game(1000)
为每个节点定义了以下四个属性
# Attributes
V(g)$attribute1 <- V(g) %in% sample(V(g), 20)
V(g)$attribute2 <- V(g) %in% sample(V(g), 20)
V(g)$attribute3 <- V(g) %in% sample(V(g), 20)
V(g)$attribute4 <- V(g) %in% sample(V(g), 20)
在节点中,我有一个特别感兴趣的12,000 subset
:
# Subset of 100 nodes
V(g)$subset <- V(g) %in% sample(V(g), 100)
我想要获得的是我subset
邻域的分析(计数)。也就是说,我想定义
V(g)$neigh.attr1 <- rep(NA, vcount(g))
V(g)$neigh.attr2 <- rep(NA, vcount(g))
V(g)$neigh.attr3 <- rep(NA, vcount(g))
V(g)$neigh.attr4 <- rep(NA, vcount(g))
,NA
中的每个节点都会替换subset
,并且相应的节点数量为V(g)$attribute{1..4}==TRUE
。
我可以使用
轻松创建感兴趣的社区列表neighbours <- neighborhood(g, order = 1, V(g)[V(g)$subset==TRUE], mode = "out")
但我想不出一种有效的方法来迭代每个neighbours
并计算四个属性中每一个的统计数据。事实上,我想出的唯一方法是一个循环,考虑到原始图形的大小需要太长时间:
subset_indices <- as.numeric(V(g)[V(g)$subset==TRUE])
for (i in 1:length(neighbours)) {
V(g)$neigh.attr1[subset_indices[i]] <- sum(V(g)$attribute1[neighbours[[i]]])
V(g)$neigh.attr2[subset_indices[i]] <- sum(V(g)$attribute2[neighbours[[i]]])
V(g)$neigh.attr3[subset_indices[i]] <- sum(V(g)$attribute3[neighbours[[i]]])
V(g)$neigh.attr4[subset_indices[i]] <- sum(V(g)$attribute4[neighbours[[i]]])
}