2017-07-13 112 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))