簡體   English   中英

網絡度

[英]Degree of a Network

我已經開始在R中使用網絡。我知道R中有一個名為igraph的程序包,它具有許多用於網絡分析和可視化的功能。 我想計算一個小型網絡的程度。 例如

mydegree=c(2,3,5)
g=degree.sequence.game(mydegree)

現在,要獲取每個節點的度數,我可以簡單地在igraph使用命令degree ,然后說degree(g) 但是,如果我不想使用此度數命令,可以使用什么公式來計算度數?

您真的不想使用任何igraph函數嗎? 我假設您至少要使用igraph加載或生成圖形,否則這個問題就沒有多大意義了。

因此,如果要將生成的圖形轉換為不需要igraph處理的圖形,則實際上有三個選擇。

如您在另一個答案中所見, get.adjlist()會給您一個鄰接列表,然后程度由列表中每個向量的長度確定:

g <- degree.sequence.game(rep(2,10))
al.g <- get.adjlist(g)
sapply(al.g, length)
# [1] 2 2 2 2 2 2 2 2 2 2

get.adjacency()將為您提供一個鄰接矩陣,然后可以通過簡單地對行(或列,如果您有向圖)求和來計算度數:

adj.g <- get.adjacency(g)
rowSums(adj.g)
# [1] 2 2 2 2 2 2 2 2 2 2

get.edgelist()在兩列矩陣中返回一個簡單的邊緣列表。 您需要計算每個頂點在此矩陣中出現的次數才能獲得其度:

el.g <- get.edgelist(g)
table(el.g)
# el.g
#  1  2  3  4  5  6  7  8  9 10 
#  2  2  2  2  2  2  2  2  2  2 

如果您閱讀igraph文檔,將會發現有很多方法可以做到這一點。 這是一個 獲取鄰接表,計算每個元素的長度:

mydegree=c(2,3,5)
g=degree.sequence.game(mydegree)
unlist(lapply(get.adjlist(g),length))
[1] 2 3 5

還有一個:

> mydegree = c(3,5,2,2,4,2,5,6,7)
> g=degree.sequence.game(mydegree)
> unlist(lapply(get.adjlist(g),length))
[1] 3 5 2 2 4 2 5 6 7

還有一個:

> degree(graph.famous("Zachary"))
 [1] 16  9 10  6  3  4  4  4  5  2  3  1  2  5  2  2  2  2  2  3  2  2  2  5  3
[26]  3  2  4  3  4  4  6 12 17
> unlist(lapply(get.adjlist(graph.famous("Zachary")),length))
 [1] 16  9 10  6  3  4  4  4  5  2  3  1  2  5  2  2  2  2  2  3  2  2  2  5  3
[26]  3  2  4  3  4  4  6 12 17

暫無
暫無

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

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