使用 tree$edge 行创建向量 数据

问题描述

我想使用系统发育树的 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,tree$edge[2,paste(tree$edge[3,tree$edge[3,and so on until last row ....)

结果将是:

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

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

解决方法

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

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

数据

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

也许你可以像下面这样从fread尝试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,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","85_86")

tree <- structure(c(82,83,84,85,86),.Dim = c(4L,2L))
,

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...