[英]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.