петля над графом межкластерного анализа сообществ - PullRequest
0 голосов
/ 20 декабря 2018

Я хотел бы рассчитать все межкластерные плотности объектов сообщества 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). Кто-нибудь может определить, где я допустил ошибку?

...