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

使用fortify函数提取vegan包metaMDS物种坐标失败求助

从NMDS(metaMDS)结果提取物种坐标的解决方案

问题描述

尝试用fortify()从vegan包的metaMDS结果提取物种坐标时,出现如下报错:

Error: data must be a data frame, or other object coercible by
fortify(), not an S3 object with class metaMDS/monoMDS.

示例数据与代码如下:

# 构建示例数据
spp1 <- c(5, 0, 3, 1, 2) 
spp2 <- c(0, 12, 1, 8, 1) 
spp3 <- c(0, 0, 0, 0, 1) 
bank.plot.nmds <- data.frame(spp1, spp2, spp3) 

# 运行NMDS
library(vegan)
nmds1 <- metaMDS(bank.plot.nmds, trymax = 200, k = 3)

# 尝试用fortify提取坐标,报错
fortify(nmds1)

解决方案

fortify()并不支持metaMDS/monoMDS类对象,vegan包自带了专门提取排序结果坐标的scores()函数,用它可以轻松获取样方或物种的坐标:

1. 提取物种坐标

# 提取物种的NMDS坐标,默认返回矩阵,可转成数据框
species_scores <- as.data.frame(scores(nmds1, display = "species"))
  • display = "species"指定提取物种坐标,若要提取样方坐标,改用display = "sites"。
  • 输出的数据框中,每一行对应一个物种,列对应NMDS的各个维度(如NMDS1、NMDS2、NMDS3)。

2. 同时提取样方和物种坐标(可选)

如果需要把样方和物种坐标放在同一个数据框里并区分类型,可以这样做:

# 提取样方坐标并添加类型标记
site_scores <- as.data.frame(scores(nmds1, display = "sites"))
site_scores$type <- "site"
site_scores$label <- rownames(site_scores)

# 提取物种坐标并添加类型标记
spec_scores <- as.data.frame(scores(nmds1, display = "species"))
spec_scores$type <- "species"
spec_scores$label <- rownames(spec_scores)

# 合并两个数据框
all_scores <- rbind(site_scores, spec_scores)

这样处理后,你就能得到结构化的坐标数据,方便后续分析或可视化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:09:21