使用 tree$edge 行创建向量
Creating a vector using tree$edge rows
我想使用系统发育树的 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.
但是很长 table,有 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")
也许你可以像下面这样从 data.table
尝试 fread
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))
最简单且计算效率最高的方法是
apply(tree3$edge, 1, paste0, collapse = '_')
我想使用系统发育树的 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.
但是很长 table,有 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")
也许你可以像下面这样从 data.table
尝试 fread
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))
最简单且计算效率最高的方法是
apply(tree3$edge, 1, paste0, collapse = '_')