В R: есть ли способ визуализации графа для двух групп узлов разной длины? - PullRequest
0 голосов
/ 14 января 2019

Я бы хотел сгенерировать граф из двух разных наборов узлов, которые имеют разную длину. Вы можете найти коды ниже.

Как видите, я получаю сообщение об ошибке: Ошибка: длина (от) == длина (до) не соответствует действительности !! Есть ли решение для этого?

Буду признателен за вашу помощь !!

library(DiagrammeR)
g1<- c("a","b","c")
g2<-c("d","f")

#creating a node data frame
nodes1<- create_node_df(n=length(g1),
                   style= "filled",
                   color= "lightblue",
                   shape= "box")

nodes2<- create_node_df(n=length(g2),
                    style= "filled",
                    color= "lightblue",
                    shape= "box")
edges<-create_edge_df(from = g1,
                  to= g2,
                  rel= "related",
                  color= "black")

Error: length(from) == length(to) is not TRUE



all_nodes<- combine_ndfs(nodes1, nodes2)

create_graph(nodes_df = all_nodes,
                                    edges_df = edges,
                                    directed = TRUE)

1 Ответ

0 голосов
/ 14 января 2019

Я подозреваю, что вы имеете в виду соединение каждой вершины g1 с каждой из g2. Определив nodes1 и nodes2, пусть

(all_nodes <- combine_ndfs(nodes1, nodes2))
#   id type label  style     color shape
# 1  1 <NA>  <NA> filled lightblue   box
# 2  2 <NA>  <NA> filled lightblue   box
# 3  3 <NA>  <NA> filled lightblue   box
# 4  4 <NA>  <NA> filled lightblue   box
# 5  5 <NA>  <NA> filled lightblue   box

Поскольку позже мы собираемся использовать эту переменную в create_graph, мы хотим соединить каждый из 1, 2, 3 с каждым из 4 и 5. Чтобы построить правильные аргументы для create_edge_df, мы будем использовать rep; это потому, что, как говорит ?create_edge_df,

from - вектор значений идентификатора узла, из которого выходят ребра. The длина вектора должна быть равна длине вектора.

to - вектор значений идентификатора узла, в который входят ребра. Длина вектора должна быть равна длине вектора from.

Итак,

edges <- create_edge_df(from = rep(1:3, 2), to = rep(4:5, each = 3),
                        rel = "related", color = "black")
create_graph(nodes_df = all_nodes, edges_df = edges, directed = TRUE)
...