выборка подграфов разных размеров с помощью igraph

У меня есть объект igraphmygraph с ~ 10000 узлов и ~ 145000 ребер, и мне нужно создать несколько подграфов из этого графа, но с разными размерами. Мне нужно создать подграфы определенного размера (от 5 до 500 узлов), где все узлы связаны в каждом подграфе. Мне нужно создать ~ 1000 подграфов для каждого размера (то есть 1000 подграфов для размера 5, 1000 для размера 6 и т. Д.), А затем вычислить некоторые значения для каждого графа в соответствии с различными атрибутами узла. У меня есть некоторый код, но все расчеты занимают много времени. Я думал, используяgraphlets функция, чтобы получить различные размеры, но каждый раз, когда я запускаю его на своем компьютере, он падает из-за проблем с памятью.

Вот код, который я использую:

Первым шагом было создание функции для создания подграфов разных размеров и выполнения необходимых расчетов.

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
     } 

Вторым шагом было применение функции к реальному графику.

 ### 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)
  }

Ответы на вопрос(1)

Ваш ответ на вопрос