1

我正在尝试使用该DiagrammeR包创建一个基于手动创建的两个简单数据框的图形。结果图应该只有两个节点('a'和'b')和一个连接它们的边('a' -> 'b')。

根据文档,这似乎应该很容易做到。从 1.0.1 版的包文档中,以下是create_graph()函数的最小输入:

nodes_df:一个可选的数据框,至少包含一列(称为 id),其中包含图形的节点 ID。附加列(节点属性)可以包含在命名节点属性的值中。

edges_df:一个可选的数据框,至少包含两列(称为 from 和 to),其中提供了节点 ID。附加列(边缘属性)可以包含在命名边缘属性的值中。

根据此文档,似乎以下两种定义图的尝试中的至少一种应该有效:

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(),类似于此处给出的示例?

4

1 回答 1

0

我不确定我是否充分理解了您的问题,但是,我认为使用create_node_dfcrete_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)

干杯。

于 2019-07-04T12:46:22.403 回答