R/subsetNetwork.R
53a14951
 #' Subset a polished network
 #' @description Subset the output of polishNetwork by a list of nodes name
 #' @param graph A graphNEL object. The output of polishNetwork.
 #' @param genes A list of nodes names
 #' @return An object of graph.
 #' @import graph
 #' @export
 #' @examples 
 #' library(graph)
 #' set.seed(123)
 #' g1 <- randomEGraph(LETTERS[seq.int(15)], edges=100)
 #' g1 <- subsetNetwork(g1, LETTERS[seq.int(5)])
 #' plot(g1)
 subsetNetwork <- function(graph, genes){
   stopifnot(
     "graph must be an object of graph"=
       inherits(graph,
                c("graphNEL", "distGraph", "clusterGraph",
                  "graphBAM", "MultiGraph")))
   stopifnot("genes must be a character vector"=is(genes, "character"))
   genes <- genes[genes %in% nodes(graph)]
   graph <- subGraph(genes, graph)
   ## remove the single nodes
   edges <- edgeWeights(graph)
   el <- lengths(edges)>0
   ep <- unlist(lapply(edges, function(.ele) names(.ele)))
   genes <- unique(c(names(edges)[el], ep))
   graph <- subGraph(genes, graph)
 }