按 dimnames 排序矩阵或 Dists

Order Matrices or Dists by dimnames

我正在尝试执行 Mantel 测试,为此我有一个遗传距离矩阵和一个物理距离矩阵。由于这些矩阵的生成方式,它们的“顺序”相对于彼此是混乱的。令人惊讶的是,我发现很难按 row/column 名称(即维度名称或维度名称)对这些矩阵进行排序。任何帮助将不胜感激。

下面是一个虚拟样本集:

d1 = matrix(c(0,1,2,1,0,3,2,3,0),nrow=3, ncol=3)
rownames(d1) <- c("A","B","C")
colnames(d1) <- c("A","B","C")

d3 = matrix(c(0,.2,.3,.2,0,.1,.3,.1,0),nrow=3, ncol=3)
rownames(d3) <- c("C","A","B")
colnames(d3) <- c("C", "A","B")

这将创建两个相关矩阵。让我们假设 d1 包含有关一个物种的不同菌株(例如 A、B、C)彼此分离的距离有多远的信息,而 d3 包含这些相同分离株之间的成对遗传差异。我需要这两个矩阵以相同的顺序执行 mantel 测试。

当我尝试使用顺序时,我丢失了矩阵:

d3[order(rownames(d3))]
[1] 0.2 0.3 0.0

d3[order(as.data.frame(rownames(d3)))]
[1] 0.2 0.3 0.0

正如理查德指出的那样,我漏掉了一个逗号。

d3[order(rownames(d3)), order(colnames(d3))]

完全符合我的要求!