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

R中metaMDS与scores维度不匹配报错(NMDS排序、双图绘制)

解决vegan包中scores()调用NMDS结果时的维度错误

问题背景

我尝试用R的vegan包绘制NMDS双图,执行了以下步骤:

首先读取数据:

shared_tbl <- read_tsv("data/andok.shared")

数据格式如下:

GroupBlastocatellalesFrankialesCyanobacteriales
sample13192563546
sample24114657986
sample3146312385
sample4158367631

接着处理数据并执行NMDS:

shared_df <- shared_tbl %>%
  column_to_rownames("Group")

# 构建距离矩阵
andok_dist <- avgdist(shared_df, sample = 1156)

# NMDS排序
set.seed(1996020)
andok_nmds <- metaMDS(andok_dist)
scores(andok_nmds)

调用scores()时出现错误:

Error in x$species[, choices, drop = FALSE] : incorrect number of dimensions

此前按Pat Schloss教程操作无报错,现寻求解决方法。

错误原因与解决方法

这个错误的核心原因是:当你给metaMDS()传入**距离矩阵(dist对象)**时,函数默认不会计算物种(分类单元)的排序得分,因此andok_nmds$species是无维度的对象,而scores()函数默认会尝试提取物种得分,从而触发维度错误。

有两种常用解决方式:

方式1:让metaMDS直接处理物种矩阵(推荐)

放弃提前计算avgdist的步骤,直接将物种丰度矩阵传入metaMDS(),指定距离方法为"bray"(avgdist默认使用Bray-Curtis距离)并设置抽样参数,函数会自动完成抽样、距离计算、NMDS排序的全流程,同时生成物种得分:

set.seed(1996020)
andok_nmds <- metaMDS(shared_df, distance = "bray", sample = 1156)
scores(andok_nmds)  # 可正常提取位点和物种得分,用于绘制双图

方式2:基于距离矩阵生成物种得分

若坚持提前计算距离矩阵,可通过两种方式修复:

  • 仅提取位点得分:调用scores()时明确指定display = "sites"
scores(andok_nmds, display = "sites")
  • 生成物种加权平均得分:调用metaMDS()时添加wascores = TRUE参数,基于位点得分计算物种的加权平均排序坐标
set.seed(1996020)
andok_nmds <- metaMDS(andok_dist, wascores = TRUE)
scores(andok_nmds)  # 可提取位点和物种得分

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:49