2

、およびdecompose.graphからのコミュニティ検出機能の使用についてサポートをいただければ幸いです。igraphlapply

頂点属性が「label」でエッジ属性が「weight」のigraphオブジェクトGがあります。簡単にするために、igraphとは異なる関数を使用してコミュニティメンバーシップを計算したいと思いますwalktrap.community

このグラフは連結されていないため、連結成分に分解してwalktrap.community各成分で実行し、その後、元のグラフGにコミュニティメンバーシップの頂点属性を追加することにしました。

私は現在次のことをしています

comps <- decompose.graph(G,min.vertices=2)
communities <- lapply(comps,walktrap.community)

この時点で、私が理解できない構造を持つリストオブジェクトを取得したため、行き詰まりました。のドキュメントにdecompose.graphは、リストオブジェクトが返されることだけが記載されてlapplyおり、結果を使用すると完全に混乱します。weightsさらに、コミュニティには各コンポーネントで0から番号が付けられており、パラメーターを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

誰かが私がこの問題を解決するのを手伝ってくれませんか?または役立つ情報/リンクを提供しますか?

4

1 に答える 1

4

ループを使用できます:

library(igraph)
set.seed(2)
G <- erdos.renyi.game(100, 1/50)
comps <- decompose.graph(G,min.vertices=2)
length(comps)  # 2 components, in this example
for(i in seq_along(comps)) { # For each subgraph comps[[i]]
  wt <- walktrap.community(comps[[i]], modularity=TRUE, weights=E(comps[[i]])$weight)
  wmemb <- community.to.membership(comps[[i]], wt$merges,steps=which.max(wt$modularity)-1)
  V(comps[[i]])$"walktrap" <- wmemb$membership
}

lapplyとでそれを行うことは可能ですがmapply、読みにくくなります。

comps <- decompose.graph(G,min.vertices=2)
wt <- lapply( comps, function(u)
  walktrap.community(u, modularity=TRUE, weights=E(u)$weight)
)
wmemb <- mapply( 
  function(u,v) community.to.membership(u, v$merges,steps=which.max(v$modularity)-1),
  comps, wt,
  SIMPLIFY=FALSE
)
comps <- mapply( 
  function(u,v) { V(u)$"walktrap" <- v$membership; u },
  comps, wmemb,
  SIMPLIFY=FALSE
)
于 2012-02-12T00:44:39.730 に答える