2016-03-09 130 views
0

我有一个距离矩阵1024x1024与所有术语之间的所有距离。我想定义一个从此开始的图。所以我定义了一个最小生成树,并计算了它的邻接矩阵。从矩阵的距离到邻接矩阵

我的距离矩阵是distMat

matrix_of_distances <- as.matrix(distMat) 
myGraph <- graph.adjacency(matrix_of_distances, weighted=TRUE) 

My图表是与所有可能的弧的曲线图(因为所有夫妇术语之间的距离是有限的值)。我需要的另一图表稀疏:

mst <- as.undirected(minimum.spanning.tree(myGraph)) 

从这个稀疏图我可以计算邻接的矩阵:

adjacency <- as_adjacency_matrix(mst, type = c("both", "upper", "lower"), attr = NULL, edges = FALSE, names = TRUE, sparse =igraph_opt("sparsematrices")) 

现在我想以不同的方式创建矩阵邻接,通过另一最小生成树对象。假设我已经创建了另一个生成树:

spt <- spantree(matrix_of_distances) 

如果我做的:

adjacency <- as_adjacency_matrix(spt, type = c("both", "upper", "lower"), attr = NULL, edges = FALSE, names = TRUE, sparse =igraph_opt("sparsematrices")) 

我得到的错误:

Error in as_adjacency_matrix(spt, type = c("both", "upper", "lower"), : Not a graph object

同样,我试图生成邻接矩阵从最小生成树开始。我该如何解决这个问题?

回答

0

错误来自于您使用函数as_adjacency_matrix对类spantree的对象,当它期望igraph

由于您使用的是igraph,所以一个简单的解决方案是使用igraph的函数mst从原始“距离图”计算最小生成树。

下面是如何spantree计算最小生成树:

require(vegan) 
data(dune) 
dis <- vegdist(dune) 
tr <- spantree(dis) 

结果是下面的树(plot(tr, type="t")

enter image description here

你可以得到相同的结果只能用igraph功能:

library(igraph) 
g <- graph.adjacency(as.matrix(dis), weighted=TRUE) 
g_mst <- mst(g) 

,所得树是这个样子(plot(g_mst, vertex.color=NA, vertex.size=10, edge.arrow.size=0.5)):

enter image description here

一旦你有你igraph树,你已经知道,您可以用功能as_adjacency_matrix将它转换为邻接矩阵:

A <- as_adjacency_matrix(mst)