如何用R语言打印图形矩阵

时间:2014-03-26 21:27:33

标签: r matrix adjacency-matrix

从磁盘加载外部图形作为边缘列表后,我想查看该图形的矩阵格式。这是我的步骤:

> 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

如您所见,它只打印图形信息(节点数,直接或非直接)。如何将此图形打印为关联矩阵?或者如何为入射指令提供类型?谢谢

3 个答案:

答案 0 :(得分: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.adjacency强制转换为二进制文件as.matrix,请matrix

答案 1 :(得分:0)

如果您有一个2列矩阵M,那么我们可以创建一个0的方阵,并在连接的节点上用1填充

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

答案 2 :(得分:0)

用法

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

types:要使用的可选顶点类型向量而不是类型   顶点属性。如果图表没有,则必须提供此参数   类型顶点属性

让我们将数据框称为&#34; your_data_frame&#34;和你的图表为&#34; your_graph&#34;

您创建的图表看起来没有指定类型。它看起来像下面

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

将类型指定为二分的图表看起来像

> your_graph
IGRAPH DN-B 92 22325 -- 
+ attr: name (v/c), type (v/l)
+ edges (vertex names):
DN-B中的B代表二分

要指定类型,请执行以下操作

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

注意:your_data_frame应该只有两列。如果不使用快速索引,如df [c(1,2)]

执行这些步骤后,您可以检查your_graph,现在应该指定类型

然后您可以继续使用

创建关联矩阵