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

metaMDS提取scores报维度不正确错误 物种得分不显示如何解决

报错核心诱因
  • 跨设备vegan包版本差异是直接触发因素。metaMDS()函数计算物种得分必须依赖原始物种丰度表,当输入对象是提前计算好的Unifrac距离矩阵时,函数没有计算物种得分的基础数据。新版本vegan不会在输出结果中生成无意义的species占位组分,此时直接调用scores()默认会同时提取样点、物种两类得分,索引不存在的species元素时就会抛出维度不匹配的错误。工作电脑安装的vegan版本更低,旧版本会自动生成空值填充的species占位对象,因此不会触发报错,但实际也无法输出有效的物种得分结果。
  • 代码参数设置逻辑错误。你已经提前生成了Unifrac距离矩阵,却在metaMDS()调用时传入distance = "bray"参数,该参数仅在输入为原始丰度表时才会触发对应距离计算,传入预计算距离时保留该参数会让函数执行非预期的距离重算逻辑,进一步干扰结果对象的组分生成,放大版本差异带来的兼容问题。
修复方法

根据分析需求二选一即可:

  1. 仅需样本得分开展聚类分析(适配你当前探究样本聚类规律的目标,绝大多数场景仅需样本得分)
    先修正metaMDS()的错误参数,再指定scores仅提取样点评分,完全规避物种得分的索引逻辑:
    # 移除错误的distance参数,明确告知函数输入为预计算距离矩阵
    nmds.all = metaMDS(unifrac.dist.all, k = 4, trymax = 500, distance = NULL)
    # 仅提取样本(位点)得分
    nmds.all.scores = as.data.frame(scores(nmds.all, display = "sites"))
    
  2. 确实需要输出物种得分
    不能仅传入距离矩阵运行metaMDS(),需要将原始的OTU/ASV丰度表作为输入,同时正确指定距离计算方法为Unifrac(需提前加载支持Unifrac距离计算的依赖包,如phyloseq、GUniFrac):
    # 此处otu_tab为行对应样本、列对应物种的原始丰度表
    nmds.all = metaMDS(otu_tab, k = 4, trymax = 500, distance = "unifrac")
    # 此时结果对象包含有效species组分,可正常提取全部得分
    nmds.all.scores = as.data.frame(scores(nmds.all))
    

排查验证:运行str(nmds.all)查看报错设备上的NMDS结果对象结构,可直接观察到对象内不存在有效的species矩阵组分,和报错提示完全对应;两台设备分别运行packageVersion("vegan")可确认版本差异,通常版本差≥2.6.0时会出现该兼容问题。

内容的提问来源于stack exchange,提问作者Nicolas Vanderzyl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:06:47