从列表中引用igraph的布局功能

Ala*_*lan 2 r reference list igraph

我希望能够从列表中引用一个函数.使用此代码,我想自动导出具有不同布局的图形.我正在使用igraph库.

问题是我得到函数的文本而不是函数的引用.

您是否可以提供一些代码更改以使其工作?

library(igraph)
g2 <- barabasi.game(100)
layouts = list(layout.auto, 
        layout.random, 
        layout.circle, 
        layout.sphere, 
        layout.fruchterman.reingold, 
        layout.kamada.kawai, 
        layout.spring, 
        layout.reingold.tilford, 
        layout.fruchterman.reingold.grid, 
        layout.lgl, 
        layout.graphopt, 
        layout.svd, 
        layout.norm)
for(i in layouts) {
    plot.igraph(g, layout=i, vertex.label=NA, vertex.size=3, edge.color="darkblue", edge.lty=3)
    dev.copy(png,paste("figures/network_v0.1_",substitute(i),".png",sep=""))
    dev.off()
}
Run Code Online (Sandbox Code Playgroud)

Gab*_*rdi 7

如果将实际的函数对象放入列表中,则无法再找到它们的名称.函数对象不存储其名称AFAIK.您需要将列表设为命名列表,或者只是收集函数名称:

library(igraph)
g <- barabasi.game(100)
layouts = c("layout.random",
  "layout.circle",
  "layout.sphere",
  "layout.fruchterman.reingold",
  "layout.kamada.kawai",
  "layout.spring",
  "layout.reingold.tilford",
  "layout.fruchterman.reingold.grid",
  "layout.lgl",
  "layout.graphopt",
  "layout.svd")

for (alg in layouts) {
  print(alg)
  coords <- do.call(alg, list(g))
  png(paste("figures/network_v0.1_", alg, ".png", sep=""))
  plot.igraph(g, layout=coords, vertex.label=NA,
              vertex.size=3, edge.color="darkblue", edge.lty=3)
  dev.off()
}
Run Code Online (Sandbox Code Playgroud)

一些评论.layout.norm不是布局功能.layout.auto根据图形的大小和其他属性调用其他布局函数.您错过了一些布局功能,例如layout.drl其他功能.以下是列出所有这些内容的方法,然后您可以过滤掉您不需要的内容:

grep("^layout\\.", ls("package:igraph"), value=TRUE)
#  [1] "layout.auto"                      "layout.bipartite"                
#  [3] "layout.circle"                    "layout.drl"                      
#  [5] "layout.fruchterman.reingold"      "layout.fruchterman.reingold.grid"
#  [7] "layout.graphopt"                  "layout.grid"                     
#  [9] "layout.grid.3d"                   "layout.kamada.kawai"             
# [11] "layout.lgl"                       "layout.mds"                      
# [13] "layout.merge"                     "layout.norm"                     
# [15] "layout.random"                    "layout.reingold.tilford"         
# [17] "layout.sphere"                    "layout.spring"                   
# [19] "layout.star"                      "layout.sugiyama"                 
# [21] "layout.svd"                      
Run Code Online (Sandbox Code Playgroud)