R语言mFD包alpha.fd.multidim报OneIndex选小于1元素错误如何解决
mFD包alpha.fd.multidim函数报错排查
问题场景
使用mFD包计算多维空间功能多样性指数时,用到两个输入数据集:
- 第一个数据集(物种功能轴坐标表)预览:

- 第二个数据集(群落物种权重/多度表)预览:

使用的运行代码如下:
alpha_fd_indices <- mFD::alpha.fd.multidim( sp_faxes_coord = sp_faxes_coord [ , c("PC1", "PC2", "PC3", "PC4", "PC5")], asb_sp_w = as.matrix(species), ind_vect = c("fdis", "fmpd", "fnnd", "feve", "fric", "fdiv", "fori", "fspe", "fide"), scaling = TRUE)
运行时返回报错信息:
Error in sp_coord_all_asb[[k]] <- sp_faxes_coord_k : attempt to select less than one element in OneIndex
报错原因与修复方案
这个报错是函数内部逐群落匹配对应物种坐标时,索引值小于1触发的,核心是两个输入对象不匹配,按以下优先级排查即可:
- 检查物种名匹配问题(90%以上的该类报错都是这个原因)
函数要求sp_faxes_coord的行名必须为物种名称,asb_sp_w的列名必须和坐标表的物种名一一对应。如果群落表中存在坐标表没有收录的物种,循环匹配时就会生成空索引触发报错。
运行以下代码定位问题物种:
修复方式:把输出的问题物种从群落权重表中删除,或者补全这些物种对应的功能轴坐标后再运行。# 分别提取两个对象中的物种名 sp_in_axis <- rownames(sp_faxes_coord) sp_in_community <- colnames(species) # 输出群落表中存在、但缺少功能坐标的物种 cat("缺失坐标的问题物种:", setdiff(sp_in_community, sp_in_axis), "\n") - 检查输入对象格式错误
sp_faxes_coord必须是矩阵格式,不能是data.frame,表中不能存在NA值,列名必须和传入的PC轴名称完全一致- 群落表转矩阵时不要把非数值列(比如群落ID列、生境属性列)纳入转换,否则会出现列名错乱,正确转换方式参考:
# 假设species表第一列为群落ID,其余列是物种多度/权重值 rownames(species) <- species[, 1] comm_matrix <- as.matrix(species[, -1])
- 过滤空群落
如果群落矩阵中存在整行全为0的空群落(即该样方无任何物种记录),也会触发该索引错误,运行以下代码过滤即可:# 仅保留至少有1个物种存在的群落 comm_matrix <- comm_matrix[rowSums(comm_matrix) > 0, ]
完成上述检查修正后,函数即可正常运行计算。
内容的提问来源于stack exchange,提问作者Naive Explorer
相关产品推荐
相关产品推荐

