如何在R中提取种间遗传距离并保留矩阵结构?
保留矩阵结构提取遗传距离矩阵中的种间距离
要保留原矩阵结构提取种间距离,不需要用na.omit把元素转成向量,直接对矩阵进行赋值操作即可——把同种个体的位置(含对角线)和上三角区域设为NA,只保留下三角的种间距离数值,同时维持原矩阵的维度和结构。
方案一:基于你已有的代码修改
# install.packages("ape") library(ape) data(woodmouse) dists <- dist.dna(woodmouse, model = "raw", as.matrix = TRUE) # 将上三角(不含对角线)设为NA,保留下三角 dists[upper.tri(dists, diag = FALSE)] <- NA labs <- labels(woodmouse) # 生成标记"是否为同种"的逻辑矩阵 res <- outer(labs, labs, "==") # 创建结果矩阵,将同种位置设为NA,保留种间距离的矩阵结构 interspecific_dists <- dists interspecific_dists[res] <- NA
方案二:一步到位简化代码
可以合并上三角处理和同种标记的逻辑,直接生成目标矩阵:
# install.packages("ape") library(ape) data(woodmouse) dists <- dist.dna(woodmouse, model = "raw", as.matrix = TRUE) labs <- labels(woodmouse) # 同时标记"上三角区域"和"同种个体"的位置,统一设为NA res <- outer(labs, labs, "==") interspecific_dists <- dists interspecific_dists[upper.tri(dists, diag = FALSE) | res] <- NA
结果说明
最终的interspecific_dists和原dists维度完全一致:
- 下三角区域仅保留不同种个体间的遗传距离数值
- 上三角区域、同种个体对应位置(含对角线)均为NA
内容的提问来源于stack exchange,提问作者compbiostats
相关产品推荐
相关产品推荐

