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)
如果将实际的函数对象放入列表中,则无法再找到它们的名称.函数对象不存储其名称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)