これが私の最初の質問です。だから、優しくしてください。
次の形式のデータがあります。
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 で一般的に使用されるこの質問のようなエッジのリストではありません。