使用ecodist包MRM函数报incorrect number of dimensions错误如何解决
错误产生原因
- 该报错是ecodist包2.0.9及以上版本的内置bug,由MRM函数内部对单变量距离矩阵的维度判断逻辑异常导致:当公式右侧存在仅由单列变量生成的距离矩阵时,函数会错误将二维矩阵降维为一维向量,触发索引时维度不匹配的报错。
- 官方示例中的
dist(forestpct)就是单列变量生成的距离矩阵,刚好命中该bug,问题和操作系统、R环境配置无关,因此多设备测试均会复现。
解决方案
方案1:修改代码适配当前版本
将公式中所有由单列变量生成距离矩阵的输入,提前转为矩阵格式即可规避降维问题,修改后的可运行代码如下:
library(ecodist) data(graze) MRM(dist(LOAR10) ~ dist(sitelocation) + dist(as.matrix(forestpct)), data=graze, nperm=10)
as.matrix()会强制保持变量的二维结构,避免MRM内部调用时自动降维。
方案2:安装无bug的历史版本
ecodist 2.0.7版本不存在该逻辑问题,可直接回退版本解决:
# 未安装devtools时先执行 install.packages("devtools") devtools::install_version("ecodist", version = "2.0.7", repos = "http://cran.us.r-project.org")
安装完成后直接运行官方示例代码即可正常返回结果。
内容的提问来源于stack exchange,提问作者Joe Mruzek
相关产品推荐
相关产品推荐

