我有一个矩阵,理论上应该是对称的,但在我的数据中可能没有表现出对称性。我想通过使用两个比较单元格中的最大值来强制使其对称。
test_matrix <- matrix(c(0,1,2,1,0,1,1.5,1,0), nrow = 3)
test_matrix
#> [,1] [,2] [,3]
#>[1,] 0 1 1.5
#>[2,] 1 0 1.0
#>[3,] 2 1 0.0
使用双重循环很容易实现这一点。
for(i in 1:3){
for(j in 1:3){
test_matrix[i, j] <- max(test_matrix[i, j], test_matrix[j, i])
}
}
test_matrix
#> [,1] [,2] [,3]
#> [1,] 0 1 2
#> [2,] 1 0 1
#> [3,] 2 1 0
但是我的矩阵大于$3x3$,而且 R 对循环的问题有很多记录。我也希望让我的代码尽可能清晰。事实上,我考虑过将此放在 code golf 上,但这是一个真正的问题,我认为其他人可能会感兴趣。 我看到过这个以及这个,但我的问题不同之处在于那些操作似乎实际上有一个对称矩阵只需要重新排序,而我有一个需要转换为对称矩阵的矩阵。
pmean()
(而不是pmax()
)的想法,这可能更好,具体取决于您的矩阵不对称的原因。(链接在此,因为早期评论现已被删除。) - Josh O'Brien