この手順を迅速かつ効果的に行うためのメソッドまたはクラスがigraphにありますか?
1 に答える
グラフがにg
あり、使用される頂点のセットがにあると仮定しますsampled
(これはゼロベースの頂点IDで構成されるベクトルです)。
まず、少なくとも1つの端点が含まれるエッジのセットを選択しますsampled
。
all.vertices <- (1:vcount(g)) - 1
es <- E(g) [ sampled %--% 1:n ]
es
は、対象のエッジで構成される「エッジシーケンス」オブジェクトになりました。次に、グラフのエッジリスト(mx 2行列)を取得し、エッジに対応する行を選択します。
el <- get.edgelist(g)[as.vector(es)+1]
ここではas.vector(es)
、エッジシーケンスを、エッジシーケンス内のエッジのエッジIDで構成されるベクトルに変換し、それを使用してエッジリストの適切なサブセットを選択します。Rベクトルは1からインデックス付けされますが、igraphエッジIDはゼロからであるため、エッジIDに1を追加する必要があることに注意してください。
次に、エッジリストから結果を作成します。
g1 <- graph(el, vcount(g), directed=is.directed(g))
g1
とまったく同じ数の頂点が含まれることに注意してくださいg
。次のように、サンプリングされた頂点で構成されるサブグラフを取得できます。
g1 <- subgraph(g1, sampled)
igraph 0.6以降のユーザーへの注意:igraph 0.6は、0ベースではなく1ベースのインデックスに切り替わるため、から1を引く必要all.vertices
はなく、に1を加える必要もありませんas.vector(es)
。さらに、igraph 0.6には、と呼ばれる関数が含まれているsubgraph.edges
ため、次のように簡単に使用できます。
g1 <- subgraph.edges(g, es)