Я хотел бы рассчитать все межкластерные плотности объектов сообщества igraph.Я сделал 4 сети из двух событий: событие 1 невзвешенное (gno) и взвешенное (g), событие 2 невзвешенное (gno2) и взвешенное (g2).
Я хочу перебрать все объекты сообщества (louvain_unweighted, spinglass_unweighted ... и т. Д. Их около 20) и рассчитать плотность межкластерных групп каждого наблюдаемого сообщества (членство (i) в объектах сообщества.
Что я получил до сих пор (только для louvain_unweighted и spinglass_unweighted):
for (i in c(louvain_unweighted, spinglass_unweighted)) {
sapply(unique(membership(i)), function(f) {
subg1 <- induced.subgraph(gno, which(membership(i)==f))
vertex.attributes(subg1)[['sex']] #i already tried this instead of (subg1)$sex
ecount(subg1)/ecount(gno)
})
}
Однако я получаю ошибку: оператор $ недопустим для атомарных векторов. Он работает, хотя я делаю это вручную, хотя.Но затем я должен вручную изменять объект графа в коде каждый раз, когда я его запускаю (g, g2, gno, gno2), а также кластер, который я хочу проанализировать (кластер 1 в этом случае) и объект сообщества.
subg1 <- induced.subgraph(gno, which(membership(louvain_unweighted)==1))
intradensity1 <- ecount(subg1)/ecount(gno) #for each cluster
intradensity1
[1] 0.2409241
В цикле я также хочу вычислить распределение пола (пола) в созданном подграфе subg1 (1 - женщина, 2 - мужчина).
vertex.attributes(subg1)$sex
[1] 1 1 2 2 2
Было бы здорово, если бы мне пришлось только изменить (g, g2, gno, gno2). Кто-нибудь может определить, где я допустил ошибку?