2017-07-13 113 views
0

是否可以將異構嵌套列表(包含字符向量,其他列表和列表列表)轉換爲樹狀圖或樹狀對象?這個想法會是,從假設的起點來看,每個嵌套級別都會添加一個新的分支層。將樹狀圖/樹中的嵌套列表轉換爲R

這種列表的例子可以是這樣的:

list(c("tom", "bob", "red"), c("jin", "tonic"), list(c("megan", "tina"), "carl"), "tim", list(c("chris", list(c("stella", "mia", "charly"))), "jack")) 

和所需的輸出(例如,在newick格式)應該是這樣的:

plot(read.tree(text = "((tom,bob,red),(jin,tonic),((megan,tina),carl),tim,((chris,(stella,mia,charly)),jack));")) 

非常感謝,

Luca

回答

0

在夜間我發現了一點靈感...

我做了這個解決辦法,讓我的嵌套列表的newick格式樹:

x <- list(c("tom", "bob", "red"), c("jin", "tonic"), list(c("megan", "tina"), "carl"), "tim", list(c("chris", list(c("stella", "mia", "charly"))), "jack")) 

# flatten list 
x2 <- paste0(lapply(x, function(y) paste0("(", paste0(y, collapse = ","), ")")), collapse = ",") 

# remove unwanted characters 
x2 <- gsub('\"|c|list| ', "", x2) 
x2 <- paste0("(", x2, ");") 

# remove brackets from single term list object 
library(stringr) 
x3 <- str_replace_all(x2, "\\([a-z]*\\)", function(x) gsub("^\\(|\\)$", "", x)) 

# plot 
library(ape) 
plot(read.tree(text = x3))