Получить ребра между двумя наборами вершин в R без использования матрицы смежности - PullRequest
0 голосов
/ 04 ноября 2019

Я ищу эффективный способ получить (количество) всех ребер между двумя наборами вершин в R. У меня есть большой граф с двумя (большими) наборами вершин, и я хотел бы получитьвсе ребра, которые начинаются с set1 и заканчиваются на set2 или наоборот. set1 и set2 и взаимоисключающие. График не ориентирован, поэтому я не хочу иметь повторяющиеся ребра. Я надеюсь избежать использования матрицы смежности, но если матрица смежности является наиболее эффективным с точки зрения вычислений / памяти способом, то с этим ничего не поделаешь. (Я знаю как это сделать используя матрицу смежности)

require(igraph)
require(dplyr)
graph <- make_full_graph(7)
V(graph)$name <- c("A", "B", "C", "D", "E", "F", "G")
set1 <- V(graph)[name %in% c("A", "C")]
set2 <- V(graph)[name %in% c("E", "D")]

#desired Output
    A -- E
    C -- E
    A -- D
    C -- D
#desired Output
    4  #number of edges

1 Ответ

0 голосов
/ 04 ноября 2019

В этом случае вы можете использовать операторы %--% при выборе ребер. Это будет подмножество ребер, где происходит переход от одного набора вершин к другому. Вы можете сделать

E(graph)[set1 %--% set2]
# [1] A--D A--E C--D C--E

Это можно найти на странице справки ?"igraph-es-indexing".

...