使用fortify函数提取vegan包metaMDS物种坐标失败求助
从NMDS(metaMDS)结果提取物种坐标的解决方案
问题描述
尝试用fortify()从vegan包的metaMDS结果提取物种坐标时,出现如下报错:
Error:
datamust be a data frame, or other object coercible byfortify(), 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
相关产品推荐
相关产品推荐

