R:igraph 1.0.0 布局算法的潜在问题
R: potential issue with igraph 1.0.0 layout algorithms
请加载以下函数:
weight.community <- function(row,membership,weigth.within,weight.between) {
if(as.numeric(membership[which(names(membership)==row[1])])==as.numeric(membership[which(names(membership)==row[2])])){
weight=weigth.within
}else{
weight=weight.between
}
return(weight)
}
dump(weight.community,"weight.community.R")
source("weight.community.R")
现在,这是我的问题:使用 igraph<1.0.0
,以下命令:
g=erdos.renyi.game(10,0.5)
V(g)$names=as.character(1:10)
membership=c(rep(1,5),rep(2,5))
names(membership)=V(g)$names
E(g)$weight=apply(get.edgelist(g),1,weight.community,membership,50,1)
g$layout=layout.fruchterman.reingold(g,weights=E(g)$weight)
plot(g)
曾经给我一个图表,其中顶点根据社区成员资格分组(如本 thread 所示)。但是在新版本的 igraph 中,layout.fruchterman.reingold
似乎不再响应边权重了。我尝试了新函数名称 layout_with_fr
,结果相同。 layout.kamada.kawai
也会发生同样的事情。
我从这些 release notes 中知道
Fruchterman-Reingold and Kamada-Kawai layout algorithms rewritten from
scratch
所以,这可能会让我 运行 陷入困境。对于如何解决此问题的任何指导,我将不胜感激。
这可能是在 1.0.0 中引入的 igraph C 核心中的错误。如果查看 layout_fr.c
的源代码,您会发现 weights
参数没有在布局函数中的任何地方使用。
如果您想修复此问题,请在 GitHub 上提交问题。
请加载以下函数:
weight.community <- function(row,membership,weigth.within,weight.between) {
if(as.numeric(membership[which(names(membership)==row[1])])==as.numeric(membership[which(names(membership)==row[2])])){
weight=weigth.within
}else{
weight=weight.between
}
return(weight)
}
dump(weight.community,"weight.community.R")
source("weight.community.R")
现在,这是我的问题:使用 igraph<1.0.0
,以下命令:
g=erdos.renyi.game(10,0.5)
V(g)$names=as.character(1:10)
membership=c(rep(1,5),rep(2,5))
names(membership)=V(g)$names
E(g)$weight=apply(get.edgelist(g),1,weight.community,membership,50,1)
g$layout=layout.fruchterman.reingold(g,weights=E(g)$weight)
plot(g)
曾经给我一个图表,其中顶点根据社区成员资格分组(如本 thread 所示)。但是在新版本的 igraph 中,layout.fruchterman.reingold
似乎不再响应边权重了。我尝试了新函数名称 layout_with_fr
,结果相同。 layout.kamada.kawai
也会发生同样的事情。
我从这些 release notes 中知道
Fruchterman-Reingold and Kamada-Kawai layout algorithms rewritten from scratch
所以,这可能会让我 运行 陷入困境。对于如何解决此问题的任何指导,我将不胜感激。
这可能是在 1.0.0 中引入的 igraph C 核心中的错误。如果查看 layout_fr.c
的源代码,您会发现 weights
参数没有在布局函数中的任何地方使用。
如果您想修复此问题,请在 GitHub 上提交问题。