簡體   English   中英

R igraph 從頂點列表中的 igraph object 創建“子圖”,如果原始節點中有連接的節點,則推斷所選頂點之間的邊

[英]R igraph make “subgraph” from igraph object from list of vertices, infer edges between selected vertices if there are connected nodes in original

我正在使用來自 R 的 igraph。 我知道我們可以用選定的頂點制作一個子圖,但是如果這些節點沒有直接連接,那么新子圖中就不會有邊。 如果有其他節點(不是頂點列表的一部分)間接連接這兩個節點,有沒有辦法制作一個在兩個節點之間創建邊的子圖? 例如,如果我有一個具有以下邊的圖:EF FG 並且我的頂點列表包含 E 和 G,我如何創建一個創建該邊 EG 的新子圖? 謝謝!!!

找到兩步之外的鄰居的一種方法是將鄰接矩陣與自身相乘(例如,請參見此處的注釋)。

首先創建問題中描述的圖表:

library(igraph)
g <- graph_from_literal(E--F, F--G)

然后取鄰接矩陣( m )並將其與自身相乘。

m <- get.adjacency(g, sparse = F)
m2 <- m %*% m

從生成的鄰接矩陣構建新圖並刪除所有度數為 0 的頂點(無二度鄰居):

g2 <- graph_from_adjacency_matrix(m2, diag = F, mode = "undirected") 
induced_subgraph(g2, degree(g2) > 0)
#> IGRAPH 089bf67 UN-- 2 1 -- 
#> + attr: name (v/c)
#> + edge from 089bf67 (vertex names):
#> [1] E--G

使用reprex v2.0.2創建於 2022-08-26

根據評論中的建議,我得出:

require(igraph)
set.seed(1)    
g   <- erdos.renyi.game(2^6, 1/32)
V(g)$name <- seq(vcount(g))
filter <- c(7,22, 1, 4, 6)
amg <- g[]                                  # adjacency matrix g
clg <- clusters(g)$membership               # strongly connected components

amtc      <- clg[row(amg)] == clg[col(amg)] # adjacency matrix of transitive closure
dim(amtc) <- dim(amg)
gtc <- simplify(graph.adjacency(amtc, mode="undirected")) # transitive closure of g
V(gtc)$name <- V(g)$name

isg <- induced_subgraph(gtc, filter)
plot(isg)

但是,如果 g 很大並且子圖明顯更小,則此解決方案不可行。

如果子圖 << 原始圖則:

require(igraph)
set.seed(1)    
g   <- erdos.renyi.game(2^6, 1/32)
V(g)$name <- seq(vcount(g))
filter <- c(7,22, 1, 4, 6)

clg  <- components(g)$membership[filter]    # strongly connected components
amfi <- outer(X=clg, clg, FUN = "==")*1     # cross product = 1, when equal
fitc <- simplify(graph.adjacency(amfi, mode="undirected")) # transitive closure of filter in g
plot(fitc)

在 Szabolcs 的基礎上,請注意 connect(g, vcount(g)) 計算 g 的傳遞閉包。 但是不適合較大的圖(vcount > 8192)。

require(igraph)
g  <- make_graph(~ E-G, G-F)
fi <- c("E", "F")

system.time(tcg <- connect(g, vcount(g)) )
sg <- subgraph(tcg, V(tcg)[fi])
sg

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM