2012-03-14 50 views

回答

3

我們假設你的圖是在g中,並且要使用的頂點集是sampled(它是一個由從零開始的頂點ID組成的向量)。

首先,我們選擇邊的集合,其中至少一個端點是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的向量邊緣序列中的邊緣,並用它來選擇邊緣列表的適當子集。請注意,我們必須將1添加到邊緣ID,因爲R向量從1開始索引,但igraph邊緣ID從零開始。

接下來,我們就從邊列表構造的結果:

g1 <- graph(el, vcount(g), directed=is.directed(g)) 

注意g1將僅包含儘可能多的頂點爲g。可以按如下方式採取由採樣頂點的子圖:

g1 <- subgraph(g1, sampled) 

注到的igraph 0.6的用戶和上述:的igraph 0.6將基於0切換到基於1的索引,而不是,所以沒有需要從all.vertices中減去1,並且不需要將1加到as.vector(es)。此外,igraph 0.6將包含一個稱爲subgraph.edges的功能,所以人們可以簡單地使用它:

g1 <- subgraph.edges(g, es) 
相關問題