【问题标题】:Creating a vector using tree$edge rows使用 tree$edge 行创建向量
【发布时间】:2021-01-13 20:52:43
【问题描述】:

我想使用系统发育树的 tree$edge 行创建一个名称向量。我怎样才能构建这个向量? 示例:

tree$edge # object
     [,1] [,2]
  [1,]   82   83
  [2,]   83   84
  [3,]   84   85
  [4,]   85   86
  [5,]   86   87
  [6,]   87   88
  [7,]   88   89
  [8,]   89   90
  [9,]   90   91
 [10,]   91    1
 [11,]   91   92
 [12,]   92    2
 [13,]   92   93
 [14,]   93   94
 [15,]   94    3
 [16,]   94    4
 [17,]   93   95
 [18,]   95   96
 [19,]   96    5
 [20,]   96    6

我想创建一个向量(我称之为“vector_names”),每个元素都是tree$edge 的行之一。 我可以逐行执行此操作:

vector_names = c(paste(tree$edge[1,1],tree$edge[1,2], sep = "_"), 
               paste(tree$edge[2,1],tree$edge[2,2], sep = "_"),
               paste(tree$edge[3,1],tree$edge[3,2], sep = "_"),
                and so on until last row ....)

结果将是:

vector_names = 82_83, 83_84, 84_85, 85_86, etc.

但是是一个有 161 行的长表,我想知道是否有更快的方法来生成上面的 vector_names。

【问题讨论】:

    标签: r tree phylogeny ape


    【解决方案1】:

    也许你可以试试fread from data.table,如下所示

    tree <- as.matrix(fread(text = paste0(paste0(vector_names, "\t")), sep = "_"))
    

    read.table 来自基础 R

    tree <- as.matrix(read.table(text = paste0(paste0(vector_names, "\t")), sep = "_"))
    

    给了

         V1 V2
    [1,] 82 83
    [2,] 83 84
    [3,] 84 85
    [4,] 85 86
    

    更新

    如果你想从树中获取vector_names,你可以试试

    > do.call(paste, c(data.frame(tree), sep = "-"))
    [1] "82-83" "83-84" "84-85" "85-86"
    

    数据

    vector_names <- c("82_83", "83_84", "84_85", "85_86")
    
    tree <- structure(c(82, 83, 84, 85, 83, 84, 85, 86), .Dim = c(4L, 2L))
    

    【讨论】:

    • 谢谢,但我认为这不能回答我的问题。我编辑我的帖子以使其清楚。我没有vector_names。我想通过使用 tree$edge 对象的行来创建一个。
    【解决方案2】:

    我们可以使用strsplit 来分割_ 然后rbind list 元素

    do.call(rbind, lapply(strsplit(vector_names, "_"), as.numeric))
    

    数据

    vector_names <- c("82_83", "83_84", "84_85", "85_86")
    

    【讨论】:

    • 谢谢。我编辑我的帖子以使其清楚。我有对象tree3$edge 并希望使用它的每一行来创建vector_names
    【解决方案3】:

    最简单且计算效率最高的方法是 apply(tree3$edge, 1, paste0, collapse = '_')

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-03
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多