0
私はigraph
パッケージを使用しています。異なるアルゴリズム実装のコミュニティ内エッジの数を計算する関数を作成しようとしています。アルゴリズムのコミュニティ検出機能であっても、関数内のすべてを連結しようとします。このように:R - 条件付きで別の関数を呼び出す関数
library("igraph")
intra.edges<-function(G,algorithm) {
if(algorithm==1){
Mod<-cluster_louvain(G)}
if(algoritmo==2){
Mod<-cluster_edge_betweenness(G)}
if(algoritmo==3){
Mod<-cluster_walktrap(G)}
Com<-as.data.frame(sizes(Mod))
NoCom<-as.vector(Com$Community.sizes)
vert<-NULL
for(i in 1:length(NoCom)){
M<-which(membership(Mod)==i)
sg<-induced.subgraph(G,M)
c.ec<-ecount(sg)
vert<-c.ec
}
intra<-data.frame(Com,vert)
print(intra)
}
私がこの機能を試しても、正しく動作しません。
私が実行します:たとえば
G <- graph.famous("Zachary")
intra.edges(G,1)
私が取得:
Community.sizes Freq vert
1 9 6
2 7 6
3 9 6
4 4 6
5 5 6
そして私はintra.edges(G,2)
またはintra.edges(G,3)
を実行すると私は同じ出力を得ます。
また、すべてのネットワークコンポーネントに6つの頂点があるわけではなく、1つのコンポーネント内にのみ存在します。あなたがあなたのコードを変更することで、あなたのforループの反復ごとにデータフレームにvert
のあなたの計算値を追加するか
あなたの関数内で等価性をテストするには、 '<--'を使用しています。 '=='を使うべきです。 '< - 'は代入演算子です。 – dash2
@ dash2あなたはそうですが、「vert」の列には同じ値が続きます。ありがとう! – Dan
あなたは 'vert 'にループの中で何度も割り当てています。以前の割り当てを上書きするたびに'vert [i] < - c.ec'のようなものがほしいかもしれません。私はあなたがこのようなことをする前にいくつかのRの基礎を学ぶ必要があるかもしれないと思う。 – dash2