我想生成一個有100個節點的格子,但希望確保所有節點具有相同數量的鄰居。爲每個節點生成有相同數量鄰居的有向格子
然而,當我這樣做:
d=graph.lattice(100,0,nei=10,directed=TRUE,circular=TRUE)
get.edgelist(d)
然後我可以看到很多節點不具有相同數量的鄰居。
是否有任何方法可以確保每個節點具有相同數量的連接(假定第一列代表節點和第二列連接)?
我想生成一個有100個節點的格子,但希望確保所有節點具有相同數量的鄰居。爲每個節點生成有相同數量鄰居的有向格子
然而,當我這樣做:
d=graph.lattice(100,0,nei=10,directed=TRUE,circular=TRUE)
get.edgelist(d)
然後我可以看到很多節點不具有相同數量的鄰居。
是否有任何方法可以確保每個節點具有相同數量的連接(假定第一列代表節點和第二列連接)?
這是因爲graph.lattice
的默認邊緣方向不適用於有向圖。你可以做的是建立一個無向圖,然後將其轉換爲直接:
d <- as.directed(graph.lattice(100, 0, nei=10, directed=FALSE, circular=TRUE))
unique(degree(d, mode="in"))
# [1] 20
unique(degree(d, mode="out"))
# [1] 20
如果你要非互惠的邊緣,那麼最簡單的(但稍差可讀)解決方案是
d <- graph(sapply(1:100, function(i) {
rbind(i, ((i+1):(i+10)-1) %% 100 + 1)
}))
unique(degree(d, mode="in"))
# [1] 10
unique(degree(d, mode="out"))
# [1] 10
但是爲什麼當每個節點有10個鄰居時它的程度是20? – user1723765
因爲處處都有相互的邊緣。但是,如果你不想要相互的邊緣,使用第二種解決方案。 –
這個相同的方法可以應用於不平衡數量的鄰居嗎?我想要一個格子圖,其中每個節點恰好有3個鄰居。但是當我繪製這樣的圖時,每個節點都會有6條邊。有沒有辦法讓每個圖形只有3條邊? – user1984076
您可以創建一個邊界列表並從中創建圖表。在這種情況下,假定你只考慮鏈接到(定向)的鄰居,那麼你可以這樣做:
el <- do.call(rbind,
lapply(1:100,
function(e) {cbind(rep(e,10),
sample(setdiff(1:100, e),10))}))
d <- graph.edgelist(el)
此選取10個隨機節點(自身以外)的節點鏈接。
這將是一個隨機圖,而不是一個晶格的權利? – user1723765
這是一個隨機圖。我誤解了,並認爲這是你想要的。 –
如何你是否打算處理2個節點只有1個鄰居的事實? –