将graphNEL图转换为网络图

时间:2016-11-17 18:18:07

标签: r layout graph ggplot2 igraph

我正在尝试将graphNEL图表转换为network图表。

以下是使用topGO的{​​{1}}:

的示例
vignette

尝试通过 library(topGO) library(ALL) data(ALL) data(geneList) affyLib <- paste(annotation(ALL),"db",sep= ".") library(package=affyLib,character.only=TRUE) topgo.obj <- new("topGOdata",description="Simple session",ontology="BP",allGenes=geneList,geneSel=topDiffGenes,nodeSize=10,annot=annFUN.db,affyLib=affyLib) topgo.graph <- attr(topgo.obj,"graph")

topgo.graph转换为网络
intergraph

最后

  library(network)
  library(sna)
  library(scales)
  library(igraph)
  library(intergraph)

  topgo.igraph <- graph_from_graphnel(topgo.graph,name=TRUE,weight=TRUE,unlist.attrs=TRUE)

抛出此错误:

topgo.network <- asNetwork(topgo.igraph,amap=attrmap())

当我用Error in as.data.frame.default(x[[i]], optional = TRUE) : cannot coerce class ""environment"" to a data.frame 的例子尝试这个时:

intergraph

它工作正常  到目前为止,我可以告诉asNetwork(exIgraph) 和topgo.igraph看起来类似:

exIgraph

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

由于“基因”属性,这种情况正在发生。如果您使用V(topgo.igraph)$gene查看它,您将看到它返回环境列表而不是向量。当深入intergraph代码时,它会尝试将顶点属性强制转换为数据框,而这是无法做到的。 (这发生在dumpAttr()函数中 - 请参阅getAnywhere(dumpAttr.igraph)。)

要解决此问题,您可以简单地删除属性:

topgo.igraph <- delete_vertex_attr(topgo.igraph,"genes")
topgo.network <- asNetwork(topgo.igraph,amap=attrmap())

我认为论证unlist.attrs=T旨在防止上面的确切问题,但在这种情况下不起作用。 可能可归因于网络中基因使用的命名约定。

如果查看原始graphNEL对象中的属性,您会注意到它由类environment的对象组成:

> head(graph::nodeData(topgo.graph, attr = "genes"))
$`GO:0000003`
<environment: 0x15c005ae0>

$`GO:0000070`
<environment: 0x15c136bf0>

$`GO:0000075`
<environment: 0x15c118a70>

$`GO:0000077`
<environment: 0x15c13ae70>

$`GO:0000079`
<environment: 0x163145670>

$`GO:0000082`
<environment: 0x16313d148>)

您还可以更改原始topGO对象中的属性数据以解决问题:

nodeData(topgo.graph, attr = "genes") <- topgo.obj@graph@nodes
topgo.igraph <- graph_from_graphnel(topgo.graph,name=TRUE,weight=TRUE,unlist.attrs=TRUE)
topgo.network <- asNetwork(topgo.igraph,amap=attrmap())

如果您需要,这可以保留基因的顶点属性:

> head(network::get.vertex.attribute(topgo.network, "genes"))
[1] "GO:0000003" "GO:0000070" "GO:0000075" "GO:0000077" "GO:0000079" "GO:0000082"