R语言使用ordihull给NMDS图加多边形时参数长度为零报错如何解决
NMDS ordihull函数报错解决方案
报错信息
Error in if (n < 4) return(colMeans(x[-n, , drop = FALSE])) : argument is of length zero
报错原因
ordihull是vegan包中为排序结果生成分组凸包的函数,第一个参数要求传入排序分析的结果对象(如metaMDS生成的m3),或者完整的坐标矩阵+明确的分组参数groups- 原调用仅传入了两个单独的坐标列,没有指定分组变量,函数无法识别按什么维度生成凸包,导致内部计算时输入为空触发报错
可行解决方法
方法1:直接传入metaMDS结果对象+分组变量
将原来的ordihull调用替换为以下代码即可:
ordihull(m3, groups = mdat$site, label=T, lwd=2, draw="polygon", col= c("blue", "red", "green"))
方法2:传入坐标矩阵+分组变量
如果要直接传入计算好的NMDS坐标,写法如下:
ordihull(mdat[,c("MDS1","MDS2")], groups = mdat$site, label=T, lwd=2, draw="polygon", col= c("blue", "red", "green"))
可选优化:添加半透明填充
如果需要阴影多边形效果,可调整颜色透明度:
library(scales) ordihull(m3, groups = mdat$site, label=T, lwd=2, draw="polygon", col= alpha(c("blue", "red", "green"), 0.3))
内容的提问来源于stack exchange,提问作者Terrible_Coder
相关产品推荐
相关产品推荐

