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

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

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

    duplicated(E(net))

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

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))
}
Другие вопросы по тегам