You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并矩阵上下三角并封装为函数?(R语言)

R矩阵合并与函数封装方案

1. 生成新矩阵的实现方式

不用修改原矩阵emp,直接初始化新矩阵分别填充下三角和上三角值:

# 初始化原矩阵
emp <- matrix(nrow = 13, ncol = 13)
emp2 <- matrix(nrow = 13, ncol = 13)

emp[lower.tri(emp)] <- 2
emp2[lower.tri(emp2)] <- 3

# 创建新矩阵存储结果
result_mat <- matrix(nrow = 13, ncol = 13)
# 填充下三角为2
result_mat[lower.tri(result_mat)] <- emp[lower.tri(emp)]
# 填充上三角为3(转置emp2的下三角匹配上三角位置)
result_mat[upper.tri(result_mat)] <- t(emp2[lower.tri(emp2)])

2. 封装函数处理列表中的矩阵

针对批量处理列表内矩阵的需求,封装带校验的函数:

merge_tri_matrices <- function(mat_list) {
  # 校验输入矩阵是否为同维度方阵
  dims <- sapply(mat_list, dim)
  if (!all(dims[1,] == dims[2,]) || length(unique(dims[1,])) != 1) {
    stop("所有矩阵必须是同维度的方阵")
  }
  
  n <- dims[1,1]
  result <- matrix(nrow = n, ncol = n)
  
  # 下三角取列表第一个矩阵的下三角值
  result[lower.tri(result)] <- mat_list[[1]][lower.tri(mat_list[[1]])]
  # 上三角取列表第二个矩阵的下三角转置值
  result[upper.tri(result)] <- t(mat_list[[2]][lower.tri(mat_list[[2]])])
  
  # 可自定义对角线值,示例设为NA
  diag(result) <- NA
  
  return(result)
}

# 函数调用示例
mat_list <- list(emp, emp2)
final_mat <- merge_tri_matrices(mat_list)

注:如果需要调整对角线数值,直接修改diag(result)的赋值即可。

内容的提问来源于stack exchange,提问作者Daniel Estévez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 23:02:42