Подтвердить что ты не робот

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

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

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

    duplicated(E(net))

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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