14

我正在为 R 使用 igraph。我的图基于一个包含平行边的边列表(多个边具有相同的源和目标)。我想将这些平行边转换为边属性权重。有没有办法做到这一点?

如果没有简单的方法。如何识别这些平行边缘?

    duplicated(E(net))

不返回单个重复项。我想它正在寻找重复的边缘 id。

4

3 回答 3

26

您还可以使用E(graph)$weight <- 1followsimplify(graph, edge.attr.comb=list(weight="sum"))为每条边分配 1 的权重,然后在对权重求和时将多个边折叠为单个边。

于 2012-10-21T21:05:31.707 回答
4

似乎将具有平行边的未加权图导出到邻接矩阵中igraph会创建一个权重列表,其中边的数量作为权重,然后可以再次读取:

library("igraph")
E <- matrix(c(1,1,1,2,2,2),3,2)
G <- graph.edgelist(E)

G2 <- graph.adjacency(get.adjacency(G),weighted=TRUE)
于 2012-10-21T14:32:24.343 回答
0

如果您想在不向图形添加权重属性的情况下获取图形的平行边数,可以使用以下函数:

duplicated <- function(graph){
  g_local <- graph
  E(g_local)$weight <- 1
  g_simp <- simplify(g_local, edge.attr.comb=list(weight="sum"))
  w <- E(g_simp)$weight
  return(sum(w-1))
}
于 2017-12-12T09:20:35.467 回答