igraph permute() 方法错误

igraph permute() method bug

我想对图表进行节点置换。请参阅下面我创建的测试图。当我使用 igraph R 库中的 permute() 方法时,新图形 permute() 中没有发生任何变化。发生了什么事?

testG <- vector(mode="list", length=6); #assign initial probabilities 
testG = list("gene1"=0, "gene2"=0, "gene3"=0, "gene4"=0, "gene5"=0, "gene6"=0);
adjacency_test <- matrix(c(0,1,1,0,0,0,1,0,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0), nrow=6, ncol=6);
rownames(adjacency_test) <- c("gene1", "gene2", "gene3","gene4","gene5","gene6");
colnames(adjacency_test) <- c("gene1", "gene2", "gene3","gene4","gene5","gene6");
require(igraph)
p <- graph.adjacency(adjacency_test, mode="undirected", weighted=TRUE);
vids.permuted <- c(6,5,4,3,2,1)
p2 <- permute(p, permutation=vids.permuted)
plot(p)
plot(p2)

p:

p2:

我希望排列图 (p2) 中的团是 gene6、gene5、gene4,而不是 gene1、gene2 和 gene3,就像原来的那样。

发生了什么事?


编辑:

根据下面的正确回答,我还有一个担心。当我手动重新排列节点名称时,当我检查所有边是否相同以及原始图与置换图的度数是否相同时,igraph 怎么说是真的?

p <- graph.adjacency(adjacency_test, mode="undirected", weighted=TRUE);
p2 <- p
V(p2)$name <- V(p)$name[sample(length(V(p)$name), replace=FALSE)]
# p is for sure different from p2 now
plot(p, layout=layout.reingold.tilford)
plot(p2, layout=layout.reingold.tilford)
# But why are the degrees still the same, and edges still the same?
all(E(p)==E(p2))
degs1 <- degree(p)
degs2 <- degree(p2)
all(degs1==degs2)

置换函数交换顶点 ID 并创建同构图。这不是你想要的。要交换顶点标签,请使用

p2=p
V(p2)$name=paste("gene ",6:1)