2014-11-14 80 views
1

我最近開始使用R「igraph」軟件包(版本0.7)。我寫了一個簡單的程序來理解包的基本知識(將數據讀入圖對象,獲得節點的鄰居)。我正在使用一個圖表,其頂點從0開始。圖中的邊緣會根據需要填充,但是當我嘗試獲取節點的鄰接列表/鄰居時,我發現它並沒有給出我期望的結果。有人可以幫我解決這個問題嗎?或者指出如果我錯過了一些微不足道的東西?問題與R「igraph」包近鄰函數

下面是圖形數據/代碼,我寫道:

格拉夫邊緣數據(第一列包含第一頂點,第二列包含於其中存在從所述第一頂點的邊緣的頂點)

0 5 
1 5 
2 5 
3 5 
0 2 

> library('igraph') 
> graph_file_ori = read.table("test.txt") 
> graph_obj = graph.data.frame(graph_file_ori,directed=FALSE) 
> str(graph_obj) 
IGRAPH UN-- 5 5 -- 
+ attr: name (v/c) 
+ edges (vertex names): 

[1] 0--5 1--5 2--5 3--5 0--2 

> neighbors(graph_obj,0) 
Error in .Call("R_igraph_neighbors", graph, as.igraph.vs(graph, v) - 1, : 
At type_indexededgelist.c:750 : cannot get neighbors, Invalid vertex id 
> neighbors(graph_obj,1) 
[1] 3 5 
> neighbors(graph_obj,2) 
[1] 5 
> neighbors(graph_obj,3) 
[1] 1 5 
> neighbors(graph_obj,4) 
[1] 5 
> neighbors(graph_obj,5) 
[1] 1 2 3 4 

基於該曲線圖中,所期望的輸出是:

neighbors(0) = 5,2 
neighbors(1) = 5 
neighbors(2) = 5,0 
neighbors(3) = 5 

的4度爲0 欣賞的幫助。

回答

0

你的圖具有: 頂點1: 「0」,頂點2: 「1」,頂點3: 「2」,頂點4: 「3」,頂點5: 「5」

下面是如何我認爲鄰居()工作原理:

鄰居(graph_obj,1)< =>鄰居(graph_obj,頂點1),並將其返回頂點3,頂點5 < => 「2」, 「5」

鄰居(graph_obj,2)< =>鄰居(graph_obj,頂點2)並且它返回頂點5 < =>「5」

鄰居(graph_obj,3)< =>鄰居(graph_obj,頂點3),並將其返回頂點1,頂點5 < => 「0」, 「5」

...

0

如果想要使用符號頂點名稱,這很好,但是您還需要在查詢中使用它們。即寫

neighbors(graph_obj, "0") 

如果你想要的結果作爲符號名稱爲好,那麼你需要做的

graph_obj$name[neighbors(graph_obj, "0")] 

這將從IGRAPH版本0.8將沒有必要的。

+0

感謝您的回覆!我試圖讓頂點名稱爲「0」的鄰居。然而,執行這個我得到的輸出爲3 5,當我預期它是2,5或(3,6假設頂點id的開始於1)。根據我的理解是因爲我沒有在圖中定義名稱爲4的頂點。有什麼辦法可以解決這個問題嗎?有什麼辦法可以使用頂點ID而不是頂點名稱? – hemanths 2014-11-15 04:22:50

+0

請參閱我對此的編輯。 – 2014-11-15 05:08:33