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

如何在R语言中提取加性遗传关系矩阵A的指定元素

方法1:针对pedigreemm包生成的dsCMatrix格式A矩阵

你得到的matrizA是对称压缩稀疏矩阵,支持常规矩阵的索引操作,也有适配的专用函数:

  • 提取单个指定元素:如果矩阵的行/列名对应系谱个体ID,直接按名称或位置索引即可:
# 按ID提取个体1和个体2372的加性遗传相关值
matrizA["1", "2372"]
# 按位置提取第2行第3列的元素
matrizA[2,3]
  • 提取全部上三角元素:
library(Matrix)
# 提取上三角元素(不含对角线)
upper_tri_values <- matrizA[upper.tri(matrizA)]
# 提取上三角元素(包含对角线)
upper_tri_values_with_diag <- matrizA[upper.tri(matrizA, diag = TRUE)]

# 如果需要保存上三角对应的个体对和数值,可转成数据框导出
upper_tri_index <- which(upper.tri(matrizA), arr.ind = TRUE)
upper_tri_df <- data.frame(
  ID1 = rownames(matrizA)[upper_tri_index[,1]],
  ID2 = colnames(matrizA)[upper_tri_index[,2]],
  add_relation = as.numeric(matrizA[upper_tri_index])
)
# 导出为csv
write.csv(upper_tri_df, "A矩阵上三角元素.csv", row.names = FALSE)

方法2:修正pedigree包makeA的用法

你之前的代码没有得到矩阵是因为用法错误:which参数需要传入要提取的个体的索引值,且你没有给生成的矩阵赋值,才会返回逻辑判断结果。正确用法如下:

library(pedigree)
# 提取所有个体的全A矩阵
A_full <- makeA(pedigree_renum)
# 提取ID为"1-2372"的个体对应的A矩阵子集
A_sub <- makeA(pedigree_renum, which = which(pedigree_renum$ID == "1-2372"))

生成矩阵后,提取元素的方法和上述dsCMatrix的操作完全一致。

补充优化思路

如果你的系谱规模极大,不需要生成全A矩阵就能提取指定个体的亲缘系数,可以用pedigree包的getGenRel函数直接计算指定个体对的加性遗传相关,大幅节省内存和计算时间。

内容的提问来源于stack exchange,提问作者Victoria Topayan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 14:45:00