0

この手順を迅速かつ効果的に行うためのメソッドまたはクラスがigraphにありますか?

4

1 に答える 1

3

グラフがに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)
于 2012-03-17T10:58:23.047 に答える