Как найти идентификаторы ребер некоторых вершин в igraph? - PullRequest
1 голос
/ 11 апреля 2020

У меня есть проблема с функцией get.edge.ids() в igraph в RI, мне нужно передать ей нечетное количество вершин и получить между ними edgeIDs, но, к сожалению, он получает только примерный код попарных вершин для генерации ориентированного графа:

Graph <- erdos.renyi.game(20, 100 , directed=TRUE, loops=FALSE)

как мне вызвать get.edge.ids:

get.edge.ids(Graph, c("1", "2", "3)) 

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

insideOfCommEdgeIDs <- function(graph, vertices)
{
    out <- matrix()
    condition <- matrix()
    if (length(vertices) < 2) {return(NULL)}
    for (i in vertices)
    {
        for (j in vertices)
        {
            condition <- are_adjacent(graph,i,j)
            ifelse(condition,
                   out <- rbind(out, get.edge.ids(graph, c(i, j), directed=TRUE)),
                   next)
        }
    }
    return(out[!is.na(out)])
}

Есть ли способ сделать это быстрее?

1 Ответ

2 голосов
/ 11 апреля 2020

Вы можете использовать оператор %--% для запроса ребер по индексам вершин, а затем использовать as_ids() для получения индекса ребер.

Обратите внимание, я использую igraph версию 1.2.4.2, поэтому я использую sample_gnm() вместо erdos.renyi.game().

library(igraph)

set.seed(1491)

Graph <- sample_gnm(20, 100 , directed = TRUE, loops = FALSE)

as_ids(E(Graph)[c(1, 2, 3) %--% c(1, 2, 3)])
#> [1]  6 12

Это соответствует выводу вашей пользовательской функции:

insideOfCommEdgeIDs <- function(graph,vertices)
{
  out <- matrix()
  condition <- matrix()
  if(length(vertices) < 2) {return(NULL)}
  for(i in vertices)
  {
    for (j in vertices)
    {
      condition <- are_adjacent(graph,i,j)
      ifelse(condition,out <- rbind(out,get.edge.ids(graph,c(i,j),directed =  TRUE)),next)
    }
  }
  return(out[!is.na(out)])
}

insideOfCommEdgeIDs(Graph, c(1, 2, 3))
#> [1]  6 12

Создано в 2020-04- 10 * представительный пакет (v0.3.0)

...