这应该相对简单,但由于某种原因,我被难住了。
我想重新排序系统发育距离矩阵,以便列按字母顺序排列。
这是一个简单的例子:
require("ape")
set.seed(5)
dist(cophenetic(rtree(5)))
有任何想法吗?
像这样?
require("ape")
set.seed(5)
res <- dist(cophenetic(rtree(5)))
res <- as.matrix(res)
res <- as.dist(res[order(rownames(res)),order(colnames(res))])
如果T <- dist(cophenetic(rtree(5)))
T 属于类dist
,因此它没有名称,只有标签。
您可以订购它的标签
ordering <- sort(attr(T, "Labels"))
您可以将其强制转换为矩阵,然后对其进行排序
T.mat <- as.matrix(T)[ordering, ordering]
然后正如@Roland 建议的那样,将其转换回dist
T <- as.dist(T.mat)
如果您想控制矩阵的格式,可以使用以下
T.fm <- format(T.mat, digits=3, nsmall=3)
T.fm[row(T.fm) < col(T.fm)] <- ""
print(T.fm, quote=F)
# t1 t2 t3 t4 t5
# t1 0.000
# t2 3.436 0.000
# t3 1.309 3.632 0.000
# t4 2.145 2.338 2.530 0.000
# t5 1.756 2.783 2.173 1.136 0.000
T <- as.dist(T.fm)
T
# t1 t2 t3 t4
# t2 3.436
# t3 1.309 3.632
# t4 2.145 2.338 2.530
# t5 1.756 2.783 2.173 1.136