R igraph преобразование параллельных ребер в атрибут веса

Я работаю с igraph для R. мой график основан на списке ребер, который включает параллельные ребра (более одного ребра с тем же источником и целью). Я хотел бы преобразовать эти параллельные ребра в вес атрибута edge. Есть ли способ сделать это?

если нет простого способа. как определить эти параллельные ребра?

    duplicated(E(net))

не возвращает ни одного дубликата. Я полагаю, что он ищет дублированные идентификаторы edge.

3 ответов


вы также можете использовать E(graph)$weight <- 1 следовал по simplify(graph, edge.attr.comb=list(weight="sum")) чтобы присвоить вес 1 каждому краю, а затем сжать несколько ребер в единственные при суммировании Весов.


Кажется, экспортирует невзвешенный граф с параллельными ребрами в матрицу смежности в 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)

Если вы хотите получить количество параллельных ребер графика без добавления атрибута веса в график, вы можете использовать следующую функцию:

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))
}