使用betapart::decay.model报错:维度数量不正确问题咨询
问题:使用
betapart::decay.model运行距离衰减模型时出现维度错误报错 我尝试基于betapart::beta.pair(v1.5.6)量化的beta多样性数据,以及vegan::dist(v2.5-7)从海拔数据框计算得到的海拔距离,运行距离衰减模型。调用betapart::decay.model时出现如下报错:
Error in x[1:6, , drop = FALSE] : incorrect number of dimensions
我的数据均为维度一致的dist对象,因此对出现该报错感到困惑。请问这是当前betapart版本的问题吗?
可复现代码
# dissimilarity matrix r1 = c(NA, 0.2558140, 0.5675676, 0.4594595, 0.3636364) r2 = c(0.2558140, NA, 0.5789474, 0.4736842, 0.4222222) r3 = c(0.5675676, 0.5789474, NA, 0.6875000, 0.6410256) r4 = c(0.4594595, 0.4736842, 0.6875000, NA, 0.5384615) r5 = c(0.3636364, 0.4222222, 0.6410256, 0.5384615, NA) dissim_mat = rbind(r1,r2,r3,r4,r5) rownames(dissim_mat) = c("s1","s2","s3","s4","s5") colnames(dissim_mat) = c("s1","s2","s3","s4","s5") dissim_mat = vegan::as.dist(dissim_mat) # elevational distance r1 = c(NA,10,50,100,90) r2 = c(10,NA,40,90,80) r3 = c(50,40,NA,50,40) r4 = c(100,90,50,NA,10) r5 = c(0,80,40,10,NA) elev_mat = rbind(r1,r2,r3,r4,r5) rownames(elev_mat) = c("s1","s2","s3","s4","s5") colnames(elev_mat) = c("s1","s2","s3","s4","s5") elev_mat = vegan::as.dist(elev_mat) # run distance decay model test <- betapart::decay.model(y = dissim_mat, x = elev_mat, model.type="power", y.type="dissim", perm=10 )
原因与解决方案
这不是betapart版本的问题,而是decay.model的参数要求:它需要**矩阵格式(matrix)**的距离数据,而非dist对象。dist对象本质是一维向量,仅存储了下三角/上三角的距离值,而函数内部使用了二维矩阵的索引方式(如x[1:6, , drop = FALSE]),因此会触发维度错误。
修正方法很简单,将两个dist对象转换为矩阵即可:
# 将dist对象转为matrix dissim_mat_matrix <- as.matrix(dissim_mat) elev_mat_matrix <- as.matrix(elev_mat) # 重新运行模型 test <- betapart::decay.model(y = dissim_mat_matrix, x = elev_mat_matrix, model.type="power", y.type="dissim", perm=10 )
运行修正后的代码即可正常拟合距离衰减模型。
内容的提问来源于stack exchange,提问作者Crow
相关产品推荐
相关产品推荐

