2016-10-31 56 views
-1

我有一個圖形對象,我想遍歷所以我可以通過igraph中的edge_connectivity函數獲得每個節點的邊緣連接讀數。輸出應該是這樣的:lapply在圖形對象中的edge_connectivity

edge_connectivity(di, "10001", "12256") 
[1] 2 
edge_connectivity(di, "10001", "8496") 
[1] 2 
edge_connectivity(di, "10001", "8558") 
[1] 2 

*節點名稱是隨機生成的整數

我不能讓lapply功能正常工作,雖然。這裏是我一直試圖完成此代碼:

library(igraph) 
digraph<-read.csv('1999.csv') 
di<-graph.data.frame(digraph) 
edge_connectivity<-lapply(di, function(x) x) 

我知道這是不正確的。應該是這樣的: connectivity<-lapply(V(di), function(x) length(edge_connectivity(di))

但它也不正確,因爲edge_connectivity函數必須有源和目標參數,或者在整個網絡中留空。我只是不知道如何讓它自己遍歷網絡。

回答

1

由於您希望獲得網絡中每對節點的邊緣連接性分數,您需要找到所有配對組合並將其與edge_connectivity函數一起傳遞給sapply。我想你想在這裏sapply(它返回一個向量),而不是lapply(它返回一個列表)。無論哪種情況,語法都是相同的。

使用隨機圖'g',用combn找到所有可能的節點對。這創建了一個N×2矩陣,其中N是可能對的總數。

g <- sample_gnp(25,0.5,directed=T)a 
c <- combn(V(g),2) 

sapply超過節點的可能的對(例如,在C列數)的數目應用ege_connectivity功能。將每列中的第一行和第二行索引以獲得對中的每個節點。

sapply(1:ncol(c), function(x) edge_connectivity(g,c[1,x],c[2,x])) 

這將返回圖形中每對節點的連接性分數。請注意0​​函數的語法。該函數應用於第一個參數(1:ncol(c))中的每個元素,其中元素將替換該函數中的每個x實例。

+0

非常感謝!這正是我需要的。最後一個問題:在生成組合時,是否有可能以某種方式保留csv邊緣列表中頂點的原始名稱?否則,R分配連續的整數值,並且解釋對於大數據集而言是混亂的。 – Jasmina

+0

'combn(V(g)$ name,2)'將使用頂點名稱而不是數字。 – paqmo