Двугранная проекция igraph игнорирует направление

statespace спросил: 03 ноября 2018 в 09:26 в: r

Пример:

require(igraph)
require(tidygraph)
require(ggraph)
require(data.table)nodes <- data.table(id = 1:6, 
                    label = c("a1", "b1", "a2", "a3", "b2", "a4"), 
                    type = c("A", "B", "A", "A", "B", "A"))edges <- data.table(from = c(1, 2, 2, 3, 5),
                    to = c(2, 3, 4, 5, 6))network <- graph_from_data_frame(d = edges, vertices = nodes, directed = TRUE)ggraph(network) + 
  geom_edge_link(arrow = arrow(length = unit(4, 'mm')), 
                 start_cap = circle(3, 'mm'), 
                 end_cap = circle(3, 'mm')) + 
  geom_node_point(aes(color = type), size = 7) +
  geom_node_text(aes(label = label)) +
  theme_graph()

Вот что мы получаем:

Затем мы создаем проекции:

V(network)$type <- bipartite_mapping(network)$type
network_projections <- bipartite_projection(network)ggraph(network_projections$proj1) + 
  geom_edge_link(arrow = arrow(length = unit(4, 'mm')), 
                 start_cap = circle(3, 'mm'), 
                 end_cap = circle(3, 'mm')) + 
  geom_node_point(size = 7, color = 2, alpha = .6) +
  geom_node_text(aes(label = label)) +
  theme_graph()

И это то, что мы получаем:

Проекция показывает ссылку a2 - > a3, который не должен быть там. Что явно означает, что направленность не была принята во внимание.

Насколько я выяснил, базовая матрица инцидентности, вычисленная библиотекой igraph, рассчитывается таким образом, что не учитывает направленность. Есть ли какая-то функция, которую я пропустил, или другие библиотеки R, которые позволяют направленно проецировать двудольные сети?


0 ответов