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

如何在排序空间绘制NMDS变化轨迹?ecotraj包运行报错如何解决?

报错原因分析

这个报错的根本原因是你给trajectoryPCoA()传入的第一个参数不符合函数要求:

  • trajectoryPCoA()的第一个入参要求是所有样本两两之间的相异度矩阵(比如你做NMDS分析前基于物种丰度计算的Bray-Curtis距离矩阵等),但你当前传入的是metaMDS输出的2维NMDS坐标,参数类型完全不匹配。
  • 函数内部调用cmdscale()做主坐标分析时,会把你传入的2列坐标错误识别为相异度矩阵处理,计算得到的有效维度n过小,要求的降维维数k超出了{1,2,...,n-1}的合法范围,最终触发该报错。
    另外你提取sites和time时使用了单括号[c(1)],提取得到的是单列数据框而非向量,也可能引发参数匹配异常。
解决方案

你可以根据需求选择两种修复方案:

  • 方案1:基于已有的NMDS坐标绘制轨迹
    如果你不需要重新做PCoA,只想用已经算好的NMDS坐标绘制生态轨迹,直接换用trajectoryPlot()函数即可,这个函数专门接收已降维的坐标作为输入,修改后代码如下:
    library(ecotraj)
    # 用双括号提取为向量,避免单括号保留数据框结构
    sites <- NMDS_coords[[1]]
    time <- NMDS_coords[[2]]
    # 提取两列NMDS坐标
    nmds_axes <- NMDS_coords[, c(3,4)]
    
    trajectoryPlot(nmds_axes, sites, time,
                   survey.labels = TRUE)
    
  • 方案2:基于相异度矩阵做PCoA后绘制轨迹
    如果你确实需要在PCoA的排序空间中绘制轨迹,将第一个参数替换为你当初做NMDS分析时使用的相异度矩阵即可,示例代码如下:
    # 假设你之前计算的相异度矩阵为bray_dist
    trajectoryPCoA(bray_dist, sites, time,
                   survey.labels = TRUE)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:54:09