簡體   English   中英

在R中使用igraph使用節點度打印邊緣列表

[英]Printing edge list with node degrees using igraph in R

我是使用igraph和R的新手,並且想要執行以下操作:

1)計算路徑長度分布。 我可以使用庫中的直接函數找到平均路徑長度,但是如何對每對頂點執行此操作,以便獲得路徑長度分布?

2)我想找出所有度數高於鄰居的節點。 我嘗試將E()函數與degree()結合使用,但無法正常工作。

謝謝

1)可以使用path.length.hist來解決:

g <- graph.data.frame(data.frame(a=c(1:3),b=c(2:4)),directed=FALSE)
plot(g)

## (1)--(2)--(3)--(4)

out <- path.length.hist(g,directed=FALSE)
out
#$res
#[1] 3 2 1
#
#$unconnected
#[1] 0

因此, out$res給出了3個長度== 1的路徑,2個長度== 2的路徑和1個長度== 3的路徑,這實際上是一個直方圖/條形圖數據。 如有必要,您可以擴展以獲取表示分布的向量,例如:

rep(seq_along(out$res),out$res)
#[1] 1 1 1 2 2 3

哪個簽出:

mean(rep(seq_along(out$res),out$res))
#[1] 1.666667
average.path.length(g)
#[1] 1.666667

2)-可能是這樣的:

g <- graph.data.frame(data.frame(a=c(1:3,2),b=c(2:4,5)),directed=FALSE)
# node 2 has a higher degree than its neighbours
sapply(
  neighborhood(g,order=1),
  function(x) {degs <- degree(g,x); all(degs[1] > degs[-1]);} 
)
#[1] FALSE  TRUE FALSE FALSE FALSE

對於2),這樣做實際上更簡單,更快,並且在我看來更容易理解:

g <- graph.formula(1-2-3-4, 2-5)
degs <- degree(g)
sapply(V(g), function(x) all(degs[neighbors(g, x)] < degs[x]))
# [1] FALSE  TRUE FALSE FALSE FALSE

暫無
暫無

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

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