如何在igraph中基于顶点的邻居属性创建顶点属性?

时间:2011-10-02 19:11:44

标签: r social-networking igraph

例如,我如何计算每个顶点向外指向男性的关系百分比?

g <- erdos.renyi.game(20, .3, type=c("gnp"), directed = TRUE)
V(g)$male <- rbinom(20,1,.5)
V(g)$male[10] <- NA

1 个答案:

答案 0 :(得分:3)

一个可能的(不是必要的最佳)解决方案如下(这是一行,我只是为了便于阅读而将其分解):

unlist(lapply(get.adjlist(g, mode="out"),
       function (neis) {
           sum(V(g)[neis]$male, na.rm=T)
       }
)) / degree(g, mode="out")

现在让我们将它分解成更小的部分。首先,我们使用get.adjlist(g, mode="out")获取图表的邻接列表。这给出了一个向量列表,每个向量包含一个顶点的out-neighbors。然后我们使用lapply将一个函数应用于此列表中的每个向量。正在应用的功能如下:

function (neis) {
    sum(V(g)[neis]$male, na.rm=T)
}

该函数简单地获取neis中节点的邻居,并使用它来从整个顶点集V(g)中选择一个顶点子集。然后,为此顶点子集检索male属性,并对值进行求和,即时删除NA值。从本质上讲,此函数为您提供neis中的男性数量。

现在,返回到我们的原始表达式,我们使用lapply将此函数应用于图的邻接列表,获得一个数字列表,每个数字包含给定顶点的男性邻居的数量。我们使用unlist将此列表转换为单个R向量,并将其按元素方向除以顶点的出度以获得比率。