phyloseq执行plot_heatmap时报错NA values not allowed in 'd'问题咨询
报错原因及解决方案
核心结论
该报错与phyloseq对象是否包含进化树完全无关。
你当前使用的Bray-Curtis距离仅依赖物种丰度表计算,不需要进化树信息。报错的直接诱因是OTU表存在NA值、以及总丰度为0的空分类单元,导致距离矩阵计算时生成了无效NA值,后续排序步骤无法处理这类输入。
修复步骤
- 处理OTU表中的NA值,未检出的分类单元NA可直接替换为0:
# 提取OTU表 otu_df <- as.data.frame(otu_table(phyloseqin.species)) # 全表替换NA为0 otu_df[is.na(otu_df)] <- 0 # 替换回phyloseq对象,taxa_are_rows参数根据你的OTU表结构调整,你当前的结构是325个分类单元为行,所以设为TRUE otu_table(phyloseqin.species) <- otu_table(otu_df, taxa_are_rows = TRUE)
- 过滤总丰度为0的空分类单元,避免距离计算警告:
phyloseqin.species <- prune_taxa(taxa_sums(phyloseqin.species) > 0, phyloseqin.species)
- 处理完成后即可重新运行原有绘图代码。如果不需要按NMDS排序样本和分类,也可以直接指定排序规则,跳过距离矩阵计算步骤,避免触发同类报错:
# 示例:按样本名排序、按分类总丰度降序绘制热图 plot_heatmap(phyloseqin.species, sample.label="Sample", title = 'Relative abundance data', taxa.label='Species', sample.order = sample_names(phyloseqin.species), taxa.order = names(sort(taxa_sums(phyloseqin.species), decreasing = TRUE)))
内容的提问来源于stack exchange,提问作者Maren Hunsberger
相关产品推荐
相关产品推荐

