這是我的第一個問題;所以,請溫柔。將關係數據轉換爲分級列表中的R
我有一些數據,在形式:
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 )是th創建diagonalNetwork
列表的更好方法是什麼?
2)失敗;我怎樣才能修改我的循環來打出正確結構的列表?
3)是否有我應該使用的整個其他函數/包?
感謝您給予的任何幫助,我一直在頭撞這堵牆。反饋更好的方式來提出關於SO的問題也會受到歡迎。
澄清:
類似的問題可以在這裏找到,Convert a data frame to a treeNetwork compatible list。然而,它依賴於一個數據結構,其中根始終在第一列,而其子節點在後續列中,而不是像這個問題中的邊界列表,這在igraph中是常用的。
@Procrastinatus Maximus,我編輯它來澄清兩個問題之間的區別。那個人有着相同的最終目標,但沒有轉換關係數據,只有當根在第一列並且整個父 - 子結構在後續列中時才起作用,這在邊緣列表中不是這種情況。 –
好吧,我已經重新打開了這個問題 – Jaap