【问题标题】:Convert a nested list in dendrogram/tree with R使用 R 转换树状图/树中的嵌套列表
【发布时间】:2017-07-13 22:07:30
【问题描述】:

是否可以将异构嵌套列表(包含字符向量、其他列表和列表列表)转换为树状图或树对象?这个想法是,从一个假设的原点出发,每个嵌套级别都会添加一个新的分支层。

此类列表的示例如下:

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));"))

非常感谢,

卢卡

【问题讨论】:

    标签: r list tree nested-lists


    【解决方案1】:

    在晚上我找到了一点灵感......

    我做了这个变通方法来让我的嵌套列表成为一个 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))
    

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 1970-01-01
      相关资源
      最近更新 更多