gpt4 book ai didi

从列表中引用 igraph 的布局函数

转载 作者:行者123 更新时间:2023-12-02 06:19:21 25 4
gpt4 key购买 nike

我希望能够从列表中引用一个函数。使用此代码,我想自动导出具有不同布局的图形。我正在使用 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()
}

最佳答案

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

一些评论。 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"

关于从列表中引用 igraph 的布局函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15364729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com