如何用R语言一行代码将矩阵上三角替换为下三角并保留对角线?
一行代码实现下三角复制到上三角并保留对角线
有两种简洁的一行代码方案可以满足需求,同时完整保留矩阵的对角线:
方案一:直接替换上三角元素
用upper.tri()定位上三角区域(不含对角线),直接将这些位置的元素替换为原矩阵下三角的对应值:
mat[upper.tri(mat)] <- t(mat)[upper.tri(mat)]
方案二:调整三角矩阵的对角线参数
基于你原来的代码修改,给其中一个lower.tri()加上diag = TRUE参数,让它包含对角线,确保最终结果保留原矩阵的对角线:
mat <- t(lower.tri(mat) * mat) + mat * lower.tri(mat, diag = TRUE)
简单说明
- 方案一逻辑更直接:只修改上三角区域,对角线完全不受影响,直接保留原矩阵的对角线元素。
- 方案二是对原有代码的优化:通过让其中一个三角矩阵包含对角线,合并时自然保留了原矩阵的对角线,同时完成下三角到上三角的复制。
内容的提问来源于stack exchange,提问作者Aku-Ville Lehtimäki
相关产品推荐
相关产品推荐

