使用 lapply 或循环重复基于多个数据帧创建 .png 文件的过程

Repeat the process of creating a .png file based on multiple dataframes using lapply or loop

我在下面有 nodesedges 数据框,然后我创建了一个图形对象 gph。之后,我创建了一个名为 aspigraph.vs 对象列表,其中包含所有简单路径。 然后我希望能够使用 for 循环或 lappy() 来创建与列表长度一样多的数据帧,其中包含每个 igraph.vs 对象的名称,如 nodes 数据集,并基于这些 nodes 数据集创建尽可能多的相关 edges 数据集。 然后我使用 nodesedges 创建所有网络,然后创建与网络一样多的 .png。因此,如果 asp 的列表包含 7 个 igraph.vs 对象,我应该创建 7 个 .png 文件。 以下是 1 个文件的过程。

name<-c("Robert Zero",       "Amy Adams",         "Barry Beane",       "Henry Handler",     "Julie Jones",      
       "Charlie Cheese",    "Karen Klein",       "Lolly Landswright", "Imogene Isler",     "David Dufresne",   
       "Frank Flaherty",    "Egbert English",    "George Graham",     "Molly McKee",       "Norman Needle",    
       "Oscar Oliver",      "Peter Platteville", "Quincy Quebec",     "Roger Rabbit",      "Steve Sweet",      
       "Tom Thompson",      "Victor Valentino",  "Ulrich Uxbridge" )
label<-c("Robert Zero",       "Amy Adams",         "Barry Beane",       "Henry Handler",     "Julie Jones",      
         "Charlie Cheese",    "Karen Klein",       "Lolly Landswright", "Imogene Isler",     "David Dufresne",   
         "Frank Flaherty",    "Egbert English",    "George Graham",     "Molly McKee",       "Norman Needle",    
         "Oscar Oliver",      "Peter Platteville", "Quincy Quebec",     "Roger Rabbit",      "Steve Sweet",      
         "Tom Thompson",      "Victor Valentino",  "Ulrich Uxbridge" )
nodes<-data.frame(name,label)


from<-c("Robert Zero",       "Amy Adams",         "Barry Beane",       "Barry Beane",       "Barry Beane",      
         "Julie Jones",       "Karen Klein",       "Imogene Isler",     "David Dufresne",    "Frank Flaherty",   
         "Egbert English",    "George Graham",     "Molly McKee",       "Molly McKee",       "Amy Adams",        
         "Peter Platteville", "Amy Adams",         "Roger Rabbit",      "Julie Jones",       "Robert Zero",      
         "Steve Sweet",       "Tom Thompson",      "Steve Sweet",       "Ulrich Uxbridge",   "Henry Handler",    
         "Barry Beane",       "Barry Beane",       "Charlie Cheese",    "Barry Beane",       "Victor Valentino", 
         "Tom Thompson"     )
to<-c( "Amy Adams",         "Barry Beane",       "Henry Handler",     "Julie Jones",       "Charlie Cheese",   
       "Karen Klein",       "Lolly Landswright", "Robert Zero",       "Frank Flaherty",    "Robert Zero",      
       "George Graham",     "Robert Zero",       "Norman Needle",     "Julie Jones",       "Oscar Oliver",     
       "Robert Zero",       "Quincy Quebec",     "Robert Zero",       "Molly McKee",       "Steve Sweet",      
       "Tom Thompson",      "Victor Valentino",  "Ulrich Uxbridge",   "Barry Beane",       "Robert Zero",      
       "Imogene Isler",     "Peter Platteville", "Robert Zero",       "Roger Rabbit",      "Robert Zero",      
       "Roger Rabbit"   )

edges<-data.frame(from,to)


#Combine them in order to create the graph object
library(igraph)
library(webshot); #webshot::install_phantomjs() #in case phantomjs was not installed
library(visNetwork)
library(dplyr)

gph <- graph_from_data_frame(edges, directed=TRUE, vertices=nodes)

#Create the simple paths asp 
asp <- all_simple_paths(gph, "Steve Sweet", "Robert Zero")

anodes<-data.frame()
aedges<-data.frame()
for(i in 1 :length(asp)){
  #new nodes
  anodes[i]<-data.frame(names(asp[[i]]))
  #new edges
  aedges<-data.frame(anodes %>% mutate(to = lead(id, default = first(id))))
  colnames(aedges)[1]<-"from"
  aedges$label<-""
  aedges<-merge(edges, aedges, by = c("from", "to"))
  #create network
  vis<-visNetwork(anodes, aedges, width = "100%")
  
  #save as png in directory
  html_name <- tempfile(fileext = ".html")
  visSave(vis, html_name)
  webshot(html_name, zoom = 2, file = paste("Path", i))
  
}

我猜你想要绘制子图,你可以使用 induced_subgraph

尝试下面的代码
for (k in seq_along(asp)) {
  png(paste0("sub_gph_",k,".png"))
  plot(induced_subgraph(gph, asp[[k]]))
  dev.off()
}