#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