2014-03-26 77 views
1

從磁盤加載外部圖形作爲邊界列表後,我想要查看此圖形的矩陣格式。這是我的步驟:如何在R語言中打印圖表的矩陣

> rm(list=ls()) 
> data <- read.graph("c:\\temp\\graph.txt", format="edgelist") 
> adjm <- data.matrix(data) 
> adjm 
IGRAPH D--- 18 28 -- 
> 

> get.incidence(data) 
Error in get.incidence(data) : 
    Not a bipartite graph, supply `types' argument 

矩陣不打印。外部圖形的數據格式是這樣(graph.txt):

0 7 
2 7 
3 0 
3 2 
3 4 
4 9 
5 1 
5 6 
6 7 
7 12 
8 2 
8 3 
8 14 
10 6 
11 12 
12 13 
13 8 
14 15 
14 13 

正如你所看到的,它只能打印圖形信息(節點的數量,直接或undirect)。我如何打印此圖爲關聯矩陣?或者我如何提供發射命令的類型?由於

+0

嘗試'get.edgelist(data)'。 – jbaums

+0

那麼如何處理get.edgelist結果呢? –

+0

對不起,我誤解了您的問題 - 請參閱下面的使用igraph的解決方案。 – jbaums

回答

0

如果你有2列的矩陣M,那麼我們就可以創建0的方陣和

M <- M + 1 
adj <- matrix(0, max(M), max(M)) 
adj[M] <- 1 
+0

這一個也適用於鄰接矩陣後作出微小的變化adj [m] < - 1但是關於發生矩陣呢? –

1

與連接節點的1填補它的igraph功能使這個非常簡單。

g <- graph.ring(10) 
g 

IGRAPH U--- 10 10 -- Ring graph 
+ attr: name (g/c), mutual (g/x), circular (g/x) 

get.adjacency(g) 

10 x 10 sparse Matrix of class "dgCMatrix" 

[1,] . 1 . . . . . . . 1 
[2,] 1 . 1 . . . . . . . 
[3,] . 1 . 1 . . . . . . 
[4,] . . 1 . 1 . . . . . 
[5,] . . . 1 . 1 . . . . 
[6,] . . . . 1 . 1 . . . 
[7,] . . . . . 1 . 1 . . 
[8,] . . . . . . 1 . 1 . 
[9,] . . . . . . . 1 . 1 
[10,] 1 . . . . . . . 1 . 

get.adjacencyas.matrix如果你想它強制轉換爲二進制matrix

+0

這個打印鄰接矩陣,但是關於發生矩陣呢? –

+0

道歉,我不知道正確的方法來克服你的'不是一個二分圖'錯誤。你需要正確地指定一個'type'參數(一個二進制向量和圖中頂點的數量相同),但是我不知道如何確定這個參數。隨意「不接受」這個答案,因爲它不能解決你的問題。 – jbaums

0

用法

get.incidence(your_graph, types = NULL, ......) 

類型:一個可選的頂點類型的載體,而不是使用 類型頂點屬性的。如果圖沒有 類型的頂點屬性必須提供該參數

我們稱之爲數據幀爲「your_data_frame」和你的圖作爲「your_graph」

看起來你創建的類型爲未圖指定。它看起來像下面,其中類型被指定爲二分

> your_graph 
IGRAPH DN-- 65 333 -- 
+ attr: name (v/c) 
+ edges (vertex names): 

的圖表看起來像在DN-B

> your_graph 
IGRAPH DN-B 92 22325 -- 
+ attr: name (v/c), type (v/l) 
+ edges (vertex names): 

B代表二分

要指定的類型執行以下

V(your_graph)$type = V(your_graph)$name %in% your_data_frame[,1] 

注意:your_data_frame應該只有兩列。如果執行這些步驟可以檢查your_graph後無法使用快速索引像DF [C(1,2)]

,現在類型應指定

,那麼你可以繼續創建使用

關聯矩陣