Sampling von Subgraphen aus verschiedenen Größen mit igraph

Ich habe ein igraph Objektmygraph mit ~ 10.000 Knoten und ~ 145.000 Kanten, und ich muss eine Reihe von Untergraphen aus diesem Diagramm erstellen, aber mit unterschiedlichen Größen. Was ich brauche, ist, Untergraphen von einer bestimmten Größe (von 5 Knoten bis 500 Knoten) zu erstellen, bei denen alle Knoten in jedem Untergraphen verbunden sind. Ich muss ~ 1000 Untergraphen für jede Größe erstellen (d. H. 1000 Untergraphen für Größe 5, 1000 für Größe 6 usw.) und dann einige Werte für jedes Diagramm anhand verschiedener Knotenattribute berechnen. Ich habe Code, aber es dauert lange, bis alle Berechnungen durchgeführt sind. Ich dachte bei der Verwendung dergraphlets Funktion, um die verschiedenen Größen zu erhalten, aber jedes Mal, wenn ich es auf meinem Computer starte, stürzt es aufgrund von Speicherproblemen ab.

Hier ist der Code, den ich verwende:

er erste Schritt bestand darin, eine Funktion zu erstellen, mit der die Teilgraphen unterschiedlicher Größe erstellt und die erforderlichen Berechnungen durchgeführt werden könne

random_network<-function(size,G){
     score_fun<-function(g){                                                        
          subsum <- sum(V(g)$weight*V(g)$RWRNodeweight)/sqrt(sum(V(g)$RWRNodeweight^2))
           subsum
           } 

      genes.idx <- V(G)$name
      perm <- c()
      while(length(perm)<1000){
           seed<-sample(genes.idx,1) 
           while( length(seed)<size ){
                tmp.neigh <- V(G)[unlist(neighborhood(G,1,seed))]$name
                tmp.neigh <- setdiff(tmp.neigh, seed)
                if( length(tmp.neigh)>0 )  
                seed<-c(seed,sample(tmp.neigh,1)) else break 
            }
      if( length(seed)==size )
      perm <- c(perm,score_fun(induced.subgraph(G,seed)))
      } 
      perm
     } 

er zweite Schritt bestand darin, die Funktion auf den tatsächlichen Graphen anzuwende

 ### generate some example data
 library(igraph)
 my_graph <- erdos.renyi.game(10000, 0.0003)
 V(my_graph)$name <- 1:vcount(my_graph)
 V(my_graph)$weight <- rnorm(10000)
 V(my_graph)$RWRNodeweight <- runif(10000, min=0, max=0.05)

 ### Run the code to get the subgraphs from different size and do calculations based on nodes
 genesets.length<- seq(5:500)
 genesets.length.null.dis <- list()
 for(k in 5:max(genesets.length){ 
     genesets.length.null.dis[[as.character(k)]] <- random_network(size=k,G=my_graph)
  }

Antworten auf die Frage(10)

Ihre Antwort auf die Frage