分析大图中节点子集邻居的有效方法

时间:2015-03-17 04:12:51

标签: r igraph

我有一个包含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]]])
}

0 个答案:

没有答案