DiagrammeR: создание графика из минимального узла и границы данных - PullRequest
1 голос
/ 07 июня 2019

Я пытаюсь использовать пакет DiagrammeR для создания графика на основе двух простых фреймов данных, созданных вручную. Результирующий граф должен просто иметь два узла ('a' и 'b') и одно ребро, соединяющее их ('a' -> 'b').

Судя по документации, это должно быть очень легко сделать. Из документации пакета, начиная с версии 1.0.1, ниже приведены минимальные входные данные для функции create_graph():

nodes_df: необязательный фрейм данных, содержащий, как минимум, столбец (называется id), который содержит идентификаторы узлов для графа. Дополнительные столбцы (атрибуты узла) могут быть включены со значениями для именованного узла атрибут.

edges_df: необязательный фрейм данных, содержащий как минимум два столбца (вызывается из и в), где предоставляются идентификаторы узлов. Дополнительные столбцы (атрибуты ребер) могут быть включены в значения для именованного ребра приписывать.

На основании этой документации кажется, что по крайней мере одна из следующих двух попыток определить график должна работать:

library(Diagrammer)
options('stringsAsFactors' = FALSE)

# Using integer node IDs
create_graph(nodes_df = data.frame(id = c(1L, 2L)),
             edges_df = data.frame(from = 1L, to = 2L))

# Using character node IDs
create_graph(nodes_df = data.frame(id = c('a', 'b')),
             edges_df = data.frame(from = 'a', to = 'b'))

Однако при обеих попытках создания графика я получаю следующее сообщение об ошибке:

Error in `[.data.frame`(nodes_df, , i) : undefined columns selected

Почему звонки не работают должным образом? Каков минимальный способ создания намеченного графа путем создания фреймов данных узлов и ребер с использованием только функции data.frame(), аналогично приведенному здесь примеру?

1 Ответ

0 голосов
/ 04 июля 2019

Я не уверен, что достаточно хорошо понял вашу проблему, но, думаю, возможно, лучше использовать create_node_df и crete_edge_df вместо использования функции data.frame. Я дал вам пример при использовании этого пакета:

l1 <- c("a", "b", "c")
l2 <- c("b", "c", "d")

# find all the unique nodes
all<- unique(union(l1, l2))
all

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


 # data frame of edges
edges<-create_edge_df(from = match(l1, all),
                  to=match(l2, all),
                  label = all,
                  rel= "related",
                  color= "black")
edges
graph<-create_graph(nodes, edges)
render_graph(graph)

Приветствие.

...