2016-10-31 3 views
-1

edge_connectivity関数を持つすべてのノードに対してエッジ接続の読み取り値を得ることができるグラフオブジェクトがigraphにあります。出力は次のようになります。グラフオブジェクトのedge_connectivityにlapplyを適用

edge_connectivity(di, "10001", "12256") 
[1] 2 
edge_connectivity(di, "10001", "8496") 
[1] 2 
edge_connectivity(di, "10001", "8558") 
[1] 2 

*ノード名はランダムに生成された整数

私も、lapply機能が正常に動作させることはできません。ここに私がこれを達成しようとしているコードはあります:

library(igraph) 
digraph<-read.csv('1999.csv') 
di<-graph.data.frame(digraph) 
edge_connectivity<-lapply(di, function(x) x) 

私はこれが正しくないことを知っています。それは次のようなものでしょうか? connectivity<-lapply(V(di), function(x) length(edge_connectivity(di))

しかし、edge_connectivity関数はソース引数とターゲット引数を持つか、ネットワーク全体で空白のままでなければならないため、どちらも正しくありません。私はちょうどそれがそれ自身でネットワークを横断する方法を知らない。

答えて

1

ネットワーク内のノードのペアごとにエッジ接続スコアを取得するには、ペアのすべての組み合わせを見つけて、sapplyと、関数edge_connectivityに渡す必要があります。私はsapplyここ(ベクトルを返す)で、lapply(リストを返す)ではないと思います。いずれの場合も構文は同じです。

ランダムグラフ 'g'を使用して、ノードの可能なすべてのペアをcombnで探します。これにより、Nx2行列が作成されます。ここで、Nは可能なペアの総数です。

g <- sample_gnp(25,0.5,directed=T)a 
c <- combn(V(g),2) 

ノードの可能な対の数(Cの列の例えば数)上ege_connectivity関数を適用するsapply教えます。ペア内の各ノードを取得するには、各列の1行目と2行目のインデックスを作成します。

sapply(1:ncol(c), function(x) edge_connectivity(g,c[1,x],c[2,x])) 

グラフのノードの各ペアの接続スコアが返されます。 sapply関数の構文に注意してください。ファンクションは、最初の引数(1:ncol(c))の各要素に適用されます。ファンクション内の各インスタンスは、xに置き換えられます。

+0

ありがとうございました!これはまさに私が必要としていたものです。最後の質問:組み合わせを生成するときにcsvのエッジリストから頂点の元の名前を何とか保持することは可能ですか?さもなければ、Rは連続した整数値を割り当て、解釈は大きなデータセットで乱雑になる。 – Jasmina

+0

'combn(V(g)$ name、2)'は数字ではなく頂点名を使います。 – paqmo

関連する問題