例如,对于每个顶点,我将如何计算向外指向男性的关系百分比?
g <- erdos.renyi.game(20, .3, type=c("gnp"), directed = TRUE)
V(g)$male <- rbinom(20,1,.5)
V(g)$male[10] <- NA
例如,对于每个顶点,我将如何计算向外指向男性的关系百分比?
g <- erdos.renyi.game(20, .3, type=c("gnp"), directed = TRUE)
V(g)$male <- rbinom(20,1,.5)
V(g)$male[10] <- NA
一个可能的(不一定是最佳的)解决方案如下(这是一行,为了便于阅读,我只是将其分解):
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")
。这为您提供了一个向量列表,每个向量包含一个顶点的外邻居。然后我们使用一个函数到这个列表中的每个向量lapply
。应用的功能如下:
function (neis) {
sum(V(g)[neis]$male, na.rm=T)
}
该函数简单地获取一个节点的邻居,neis
并使用它从整个顶点集中选择一个顶点子集V(g)
。然后male
检索该顶点子集的属性并对值求和,NA
即时删除值。本质上,此函数为您提供neis
.
现在,回到我们的原始表达式,我们使用 将此函数应用于图的邻接列表lapply
,获得一个数字列表,每个数字包含给定顶点的男性邻居的数量。我们将此列表转换为单个 R 向量,unlist
然后将其按元素除以顶点的出度以获得比率。