使用R转换树状图/树中的嵌套列表
是否可以将异构嵌套列表(包含字符向量、其他列表和列表列表)转换为树状图或树对象?其想法是,从一个假设的原点开始,每个嵌套的层添加一个新的分支层 此类列表的示例如下:使用R转换树状图/树中的嵌套列表,r,list,tree,nested-lists,R,List,Tree,Nested Lists,是否可以将异构嵌套列表(包含字符向量、其他列表和列表列表)转换为树状图或树对象?其想法是,从一个假设的原点开始,每个嵌套的层添加一个新的分支层 此类列表的示例如下: list(c("tom", "bob", "red"), c("jin", "tonic"), list(c("megan", "tina"), "carl"), "tim", list(c("chris", list(c("stella", "mia", "charly"))), "jack")) 所需的输出(例如,newick
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));"))
非常感谢
卢卡那天晚上,我发现了一些灵感 我做了以下变通方法,以将嵌套列表设置为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))
x那天晚上,我发现了一些灵感
我做了以下变通方法,以将嵌套列表设置为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))
x