подсчитать внутренние и внешние ребра подграфа - PullRequest
0 голосов
/ 28 мая 2020

Учитывая неориентированный граф g и подмножество вершин v,

Я хочу подсчитать:

  • количество (внутренних) ребер g соединение вершин в v с другими вершинами в v
  • количество (внешних) ребер g, соединяющих вершины в v с вершинами g, которых нет в v

Есть ли простой способ сделать это с помощью функции igraph в R?

Воспроизводимый пример:

library(igraph)
g <- sample_gnp(100,0.5,directed = TRUE)
v = V(g)[1:10]

1 Ответ

1 голос
/ 28 мая 2020

Вы можете использовать функцию ends, чтобы найти вершины, смежные с ребром. Если оба конца ребра находятся в v, это внутреннее ребро. Если у ребра один, но не оба конца в v, оно внешнее.

E1 = which(sapply(E(g), function(e) ends(g, e)[1]) %in% v)
E2 = which(sapply(E(g), function(e) ends(g, e)[2]) %in% v)

Internal = intersect(E1, E2)
External = setdiff(union(E1,E2), Internal)

## Spot check answer
 ends(g, Internal[10])
     [,1] [,2]
[1,]    6    3
> ends(g, External[20])
     [,1] [,2]
[1,]    7   13
...