Я был бы признателен за помощь в использовании decompose.graph
, функции обнаружения сообщества от igraph
и lapply
.Использование igraph: членство в сообществах компонентов, созданных методом разложения.graph()
У меня есть объект igraph G с атрибутом вершины «метка» и атрибутом края «вес». Я хочу рассчитать членство в сообществах, используя разные функции из igraph, для простоты пусть это будет walktrap.community
.
Этот график не подключен, поэтому я решил разложить его на связные компоненты и запустить walktrap.community
на каждом компоненте, а затем добавить атрибут вершины членства сообщества исходного графа G.
Я делаю в настоящее время следующие
comps <- decompose.graph(G,min.vertices=2)
communities <- lapply(comps,walktrap.community)
в этот момент я застрять, так как я получаю список объектов со структурой я не могу понять. В документации по decompose.graph
указано только, что он возвращает объект списка, а когда я использую lapply
, результат получается совершенно путаным. Более того, сообщества нумеруются от 0 в каждом компоненте, и я не знаю, как указать параметр weights
в функцию walktrap.community
.
Если бы не было компонентов, я бы сделал следующее:
wt <- walktrap.community(G, modularity=TRUE, weights=E(G)$weight)
wmemb <- community.to.membership(G, wt$merges,steps=which.max(wt$modularity)-1)
V(G)$"walktrap" <- wmemb$membership
Может кто-нибудь, пожалуйста, помогите мне решить эту проблему? Или предоставить некоторые информацию/ссылки, которые могут вам помочь?
Большое спасибо за такой быстрый и точный ответ. Я согласен с тем, что первый вариант выглядит намного читабельнее, к тому же я до сих пор не чувствую себя комфортно, используя «* apply». У меня возникает вопрос о присвоении результатов исходному графику: 'for (i in seq_along (comps)) { \t для (j in (seq_along (V (comps [[i]])) - 1)) { \t \t cur <- V (comps [[i]]) [j] $ id \t \t V (G) [V (G) $ id == cur] $ "walktrap" <- V (comps [[i]]) [j] $ «walktrap» \t} } ', где« id »- это уникальная метка на множестве вершин. Вы знаете, что это единственный способ сделать это? – npobedina