【发布时间】:2021-01-08 22:43:14
【问题描述】:
我有一个带有边缘属性的 igraph 网络。
我想生成一个结合边属性的顶点属性。具体来说,我希望每个顶点根据其自身边缘属性的模式(或任何其他操作)分配一个属性。
在我的示例中,边表示人们之间在某个主题上的协作。
library(igraph)
library(RColorBrewer)
g <- graph("Zachary") # the Zachary carate club
V(g)$names <- c(1:gorder(g))
set.seed(1); E(g)$relation <- sample(c("A","B","C"), gsize(g), replace = TRUE)
set.seed(1); E(g)$relation_col <- sample(brewer.pal(3, "Set1"), gsize(g), replace = TRUE)
plot(g, vertex.size=10, vertex.label=NA,
vertex.color="grey",
edge.color=E(g)$relation_col)
我无法生成特定于顶点的属性。当我计算模式时,它是针对整个网络完成的,而不是针对特定边缘的
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
g <- set_vertex_attr(g, "relation", value=getmode(E(g)$relation))
vertex_attr(g)
$names
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
$relation
[1] "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B" "B"
手册参考:https://igraph.org/r/doc/igraph-attribute-combination.html
【问题讨论】: