[BioC] Using KeggGraph's KEGGpathway2reactionGraph and mergeKEGGgraphs functions
Paul Shannon
paul.thurmond.shannon at gmail.com
Thu Oct 10 20:50:00 CEST 2013
Hi David,
I tried out the new code (KEGGgraph v 1.19.0), and it works great. Thanks!
I took the liberty (I hope you don't mind) of adding a unitTest to your package which
1) fails with the old version, demonstrating Stuart's problem
2) succeeds with the new
The file is inst/unitTests/test_KEGGgraph.R
- Paul
On Oct 7, 2013, at 11:35 PM, Zhang, Jitao David wrote:
> Dear both,
>
> I have updated KEGGgraph to version 1.18.0 (subversion revision: 81275) in the devel branch of bioconductor. The KEGGpathway2reactionGraph function now returns a reaction graph that can be merged with other KEGG pathway/reaction graphs.
>
> The updated function is given below.
>
> KEGGpathway2reactionGraph <- function(pathway) {
> reactions <- getReactions(pathway)
> if(length(reactions)==0) {
> stop("The pathway contains no chemical reactions!\n")
> }
> subs <- sapply(reactions, getSubstrate)
> prods <- sapply(reactions, getProduct)
> types <- sapply(reactions, getType)
> gridlist <- lapply(seq(along=reactions),
> function(i)
> expand.grid(subs[[i]], prods[[i]], stringsAsFactors=FALSE))
> grid <- as.matrix(do.call(rbind, gridlist))
> isRepGrid <- duplicated(grid)
> uniqGrid <- grid[!isRepGrid,,drop=FALSE]
> gridTypes <- rep(types, sapply(gridlist, nrow))
> uniqGridTypes <- gridTypes[!isRepGrid]
>
> cg <- ftM2graphNEL(uniqGrid)
> allNodes <- nodes(pathway)
> allNodeNames <- sapply(allNodes, function(x) paste(getName(x), collapse=","))
> cgNodes <- allNodes[match(nodes(cg), allNodeNames)]
>
> cgEdges <- sapply(1:nrow(uniqGrid),
> function(x)
> new("KEGGEdge",
> entry1ID=uniqGrid[x,1],
> entry2ID=uniqGrid[x,2],
> type=uniqGridTypes[x],
> subtype=list()))
>
> ## set node and edge data - as KEGGNode and KEGGEdge
> ## attention: KEGGEdges may be more than graph edges, due to non-genes
> names(cgEdges) <- apply(uniqGrid,1L, paste, collapse="~")
> env.node <- new.env()
> env.edge <- new.env()
> assign("nodes", cgNodes, envir=env.node)
> assign("edges", cgEdges, envir=env.edge)
>
> nodeDataDefaults(cg, "KEGGNode") <- env.node
> edgeDataDefaults(cg, "KEGGEdge") <- env.edge
>
> return(cg)
> }
>
> Try it out and please let me know if you encounter any problem.
>
> Best wishes,
> David
>
>
>
> On Tue, Sep 3, 2013 at 9:47 PM, Paul Shannon <paul.thurmond.shannon at gmail.com> wrote:
> Hi Stuart,
>
> I have included Jitao David Zhang here as well, the package author and maintainer.
>
> I think I can reduce your problem report to these steps:
>
> library(KEGGgraph)
> filename <- "hsa00260.kgml"
> retrieveKGML("00260", organism="hsa", destfile=filename, method = "internal")
> pathway <- parseKGML(filename)
>
> g.reaction <- KEGGpathway2reactionGraph(pathway, uniqueReaction = FALSE)
> g.pathway <- KEGGpathway2Graph(pathway, genesOnly=FALSE)
>
> names(nodeDataDefaults(g.reaction)) # NULL
> names(nodeDataDefaults(g.pathway)) # KEGGNode
>
> mergeKEGGgraphs (in KEGGgraph/R/graph.R) requires that there be an edge attribute "KEGGEdge" and a node attribute "KEGGNode", and fails with the error you saw.
>
>
> So the reaction graph does not have the two attributes required by mergeKEGGgraphs. I am not sure whether this is by design, or whether it is an oversight.
> Once David clarifies that, we can devise some possible next steps for you.
>
> - Paul
>
> P.S For future posts, please include (as I have tried to do here) a smallish, self-contained and reproducible example, along with your sessionInfo:
>
> R version 3.0.1 Patched (2013-05-26 r62815)
> Platform: x86_64-apple-darwin10.8.0 (64-bit)
>
> locale:
> [1] C
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
> other attached packages:
> [1] KEGGgraph_1.17.0 graph_1.39.3 XML_3.95-0.2
>
> loaded via a namespace (and not attached):
> [1] BiocGenerics_0.7.4 parallel_3.0.1 stats4_3.0.1 tools_3.0.1
>
>
> On Sep 2, 2013, at 2:51 PM, Stuart Bradley wrote:
>
> > Hello all,
> >
> > I'm trying to build unified compound pathway maps, and have been successful
> > using this method:
> >
> > library(graph)
> > library(KEGGgraph)
> >
> > KEGGList <- list.files(path = "C:/Users/Castor
> > Castle/Documents/kgml/metabolic/ko/subset/", full.names = TRUE)
> >
> > AllGraphs <- lapply(KEGGList, function(x) {
> > pathway <- parseKGML(x)
> > pathway <- KEGGpathway2reactionGraph(pathway, uniqueReaction = FALSE)
> > })
> >
> > FinalGraph <- mergeGraphs(AllGraphs, edgemode = "directed")
> >
> > However, I'd like to be able to use mergeKEGGgraphs as it retains more
> > information. The problem is that when I replace mergeGraphs with
> > mergeKEGGgraphs
> > I get the following error (regardless of whether it's my own files, or the
> > example ones provided):
> >
> > Error in .verifyAttrName(attr, names(self at defaults)):
> > unknown attribute name: ŒKEGGNode‚
> >
> > Has anyone found a work around for this? I was fiddling with
> > setKEGGnodeData/setKEGGEdgeData in conjunction with mergeGraphs, but I
> > can't get it to work.
> >
> > Any help would be greatly appreciated.
> >
> > Cheers,
> > Stuart Bradley
> >
> > [[alternative HTML version deleted]]
> >
> > _______________________________________________
> > Bioconductor mailing list
> > Bioconductor at r-project.org
> > https://stat.ethz.ch/mailman/listinfo/bioconductor
> > Search the archives: http://news.gmane.org/gmane.science.biology.informatics.conductor
>
>
>
>
> --
>
> Jitao David Zhang | 张继涛 | Computational Biology and Bioinformatics | Pharmaceutical Divison | F. Hoffmann-La-Roche AG | CH-4070 Basel | Switzerland
>
> Tel +41 61 688 62 51
>
> Confidentiality Note: This message is intended only for the use of the named recipient(s) and may contain confidential and/or privileged information. If you are not the intended recipient, please contact the sender and delete this message. Any unauthorized use of the information contained in this message is prohibited.
>
> Please inform me immediately in case attached documents are missing!
>
>
More information about the Bioconductor
mailing list