Как сравнить два графика, чтобы определить количество одинаковых / разных ребер между двумя графами, используя пакет igraph R.

#r #graph #compare #igraph #edges

#r #График #Сравнить #igraph #ребра

Вопрос:

У меня есть два неориентированных графика

 library(igraph)
g1 <- make_graph( edges=c("A", "B", "B", "C", "C", "A"), directed=F ) 

g2 <- make_graph( edges=c("A", "B", "B", "C", "A", "C", "C", "D"), directed=F ) 
  

Я хочу сравнить ребра графов g1 с g2. Я хочу подсчитать количество ребер, которые точно совпадают, а также количество ребер, которые меняются местами (например, изменения A-> C на C-> A, поскольку в неориентированной сети оба подразумевают одинаковое ребро), и количество дополнительных ребер.

Есть ли простая функция для такого сравнения ребер? Кто-нибудь, пожалуйста, может помочь мне решить эту проблему.

Ответ №1:

 g1 <- make_graph(edges=c("A", "B",
                         "B", "C",
                         "C", "A"),
                 directed=F) 
g2 <- make_graph(edges=c("A", "B",
                         "B", "C",
                         "A", "C",
                         "C", "D"),
                 directed=F)
E(g1 %s% g2)
  

Дает:

   3/3 edges from 43be050 (vertex names):
[1] B--C A--C A--B
  

Ответ №2:

Вы можете использовать graph.intersection

 > graph.intersection(g1,g2)
IGRAPH aadee49 UN-- 4 3 --
  attr: name (v/c)
  edges from aadee49 (vertex names):
[1] B--C A--C A--B
  

Или, я думаю, вы можете использовать as_data_frame intersect , чтобы увидеть общие ребра

 commEdges <- intersect(as_data_frame(g1),as_data_frame(g2))
  

что дает

   from to
1    A  B
2    B  C
3    A  C
  

и количество общих ребер можно подсчитать с помощью nrow(commEdges)


Если вы просто хотите знать, сколько общих ребер, простой способ

 > length(intersect(E(g1),E(g2)))
[1] 3