Ответ 1
Вы также можете использовать E(graph)$weight <- 1
, а затем simplify(graph, edge.attr.comb=list(weight="sum"))
, чтобы назначить вес от 1 до каждого края, а затем сбрасывать несколько ребер в отдельные, суммируя весы.
Я работаю с igraph для R. Мой график основан на edgelist, который включает в себя параллельные ребра (более одного края с одним и тем же источником и целью). Я хотел бы преобразовать эти параллельные ребра в вес атрибута края. Есть ли способ сделать это?
Если нет простого способа. как я могу идентифицировать эти параллельные ребра?
duplicated(E(net))
не возвращает один дубликат. Я полагаю, что он ищет дублированные краевые объекты.
Вы также можете использовать 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))
}