О функции community.to.membership

library(igraph)
g=graph.famous("Zachary")
c=walktrap.community(g)
a=community.to.membership(g,c$merges,steps=2)
b=a$membership
modularity(g,b)

При выполнении функции modularity (g, b) R не ответил. Зачем?

3
nl ja de

3 ответы

Это ошибка в графике. Функция community.to.membership возвращает вектор членства на основе нуля и <модуль> модульности ожидает вектор членства на основе 1.

Функция community.to.membership на самом деле устарела, и вместо нее следует использовать функцию cutat :

library(igraph)
set.seed(42)
g <- graph.famous("Zachary")
c <- walktrap.community(g)
b <- cutat(c, steps=2)
modularity(g, b)
# [1] -0.02621631

Btw. ваш пример не воспроизводится, потому что walktrap.community не является детерминированным, и вы не устанавливаете случайное семя.

Btw.2. существует no реальная разница между версиями igraph 0.6-1 и 0.6-3 (и 0.6-x), число после тире - это только номер сборки. Пакет был перестроен по техническим причинам, а версия 0.6-3 содержит тот же код, что и 0,6-1.

5
добавлено
Благодаря! Это объяснение помогает.
добавлено автор Ben, источник

У меня такая же проблема с той же версией igraph , что и @Hnery

здесь моя установленная версия igraph:

subset(as.data.frame(installed.packages()) , Package == 'igraph', select =c('Package','Version'))
       Package Version
igraph  igraph   0.6-3

Он работает, когда я заменяю 0 в членском векторе (b) следующим образом:

 b[b==0] <- 1
> modularity(g,b)
[1] -0.04191321

У меня нет такого же результата.

0
добавлено
@ user1933981 Но вы попробовали прочитать другое решение? у вас такая же версия?
добавлено автор agstudy, источник
Обычно это то, что сказано в справочнике. Возможно, вам нужно связаться с сопровождающим пакета.
добавлено автор agstudy, источник
Установка нулей на один приведет к выполнению функции modularity , но это даст вам неправильный ответ. См. Мой ответ для правильного решения.
добавлено автор Gabor Csardi, источник
Спасибо. @agstudy Кажется, что 0 в векторе принадлежности b вызывает проблему.
добавлено автор Ben, источник
Я только что обновил пакет igraph от 0,6-1 до 0,6-3. Я нахожу причину. Членство - это числовой вектор, для каждой вершины он дает свое сообщество. Сообщества нумеруются от одного, а не от нуля. igraph.sourceforge.net/doc/R/ modularity.html
добавлено автор Ben, источник

Он работает для меня (после обновления igraph до 0.6-3), давая

> modularity(g,b)
[1] -0.05041913

Вы можете попытаться закрыть R, обновить igraph и затем повторно запустить код.

0
добавлено
У меня есть последняя версия (0.6-3), у меня все еще есть ошибка.
добавлено автор agstudy, источник
да с нуля. R версии 2.15.2 (2012-10-26) Платформа: x86_64-w64-mingw32/x64 (64-разрядная)/x86_64-pc-linux-gnu (64-разрядная версия) (я тестировал обе платформы)
добавлено автор agstudy, источник
@Henry вы можете показать свой вектор b?
добавлено автор agstudy, источник
@Didzis Спасибо, у меня такой же b.
добавлено автор agstudy, источник
Какая версия R у вас есть? Вы пытались начать с нуля?
добавлено автор Henry, источник
Он также работает для x86_64-apple-darwin9.8.0/x86_64
добавлено автор Didzis Elferts, источник
@agstudy Для меня вектор b является [1] 2 3 4 5 6 0 1 1 7 8 9 0 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
добавлено автор Didzis Elferts, источник
Спасибо. Генри. Я обновил пакет igraph. Но это все еще не сработало. Кажется, что 0 в векторе принадлежности b вызывает проблему. Это ошибка?
добавлено автор Ben, источник
@Генри. Я нахожу причину. Членство - это числовой вектор, для каждой вершины он дает свое сообщество. Сообщества нумеруются от одного, а не zero.igraph.sourceforge.net/doc/R/modularity.html
добавлено автор Ben, источник