【发布时间】:2016-12-21 07:28:13
【问题描述】:
这是我的第一个问题;所以,请温柔一点。
我有一些数据格式为:
library('networkD3')
Relationships<- data.frame(Parent=c("earth","earth","forest","forest","ocean","ocean","ocean","ocean"),
Child=c("ocean","forest","tree","sasquatch","fish","seaweed","mantis shrimp","sea monster"))
> Relationships
Parent Child
1 earth ocean
2 earth forest
3 forest tree
4 forest sasquatch
5 ocean fish
6 ocean seaweed
7 ocean mantis shrimp
8 ocean sea monster
本质上这是一个可用于制作网络地图的边列表:
net <- graph_from_data_frame(d = Relationships,
directed = T)
plot(net)
我想将其转换为可以在下面的diagonalNetwork 函数中使用的形式。
Hierarchical_list <- list(name = "earth",
children = list(list(name = "ocean",
children = list(list(name = "mantis shrimp"),
list(name = "fish"),
list(name = "sea monster"),
list(name = "seaweed")
)),
list(name = "forest",
children = list(list(name = "sasquatch"),
list(name = "tree")
))
))
diagonalNetwork(Hierarchical_list)
像这样:
当我尝试使用此循环生成列表时:
List_attempt <- list()
levels<- levels(factor(Relationships$Parent))
for(n in 1:length(levels)){
Children <- subset(Relationships, Relationships$Parent == levels[n], select = Child)
for(c in 1:length(Children)){
sublist <- as.list(Children)
List_attempt <- list(List_attempt, name = levels[n],children = sublist)
}
}
diagonalNetwork(List_attempt)
我收到此错误:
Error in FUN(X[[i]], ...) :
'options' must be a fully named list, or have no names (NULL)
1) 有没有更好的方法来为diagonalNetwork 创建列表?
2) 做不到这一点;如何修改循环以退出正确结构的列表?
3) 我应该使用其他完整的功能/包吗?
感谢您提供的任何帮助,我已经用头撞墙有一段时间了。我们也欢迎就 SO 问题提出更好的方法提供反馈。
澄清:
在这里可以找到类似的问题,Convert a data frame to a treeNetwork compatible list。然而,它依赖于一个数据结构,其中根始终位于第一列,其子节点位于后续列中,而不是 igraph 中常用的这个问题中的边列表。
【问题讨论】:
-
@Procrastinatus Maximus,我对其进行了编辑以澄清两个问题之间的区别。那个具有相同的最终目标但不转换关系数据,它仅在根位于第一列并且整个父子结构在后续列中时才有效,而在边列表中则不是这种情况。
-
好的,我重新打开了这个问题
标签: r hierarchical-data networkd3