核心问题。 对于"'qr'和'y'必须有相同的行数 "可以做哪些调试'我正在运行一个RDA,之前我已经做了几十次了。这次唯一的区别是我使用的数据和以前不同,自然。
试过的代码行。
rda_20<-rda(bio_data,abio_data)
我得到的错误代码是
Error in qr.fitted(Q, Y): 'qr' and 'y' must have the same number of rows
我检查了我的源数据的尺寸:生物。9865,259; abio: 9865,6. 运行类型检查,所有数据都是数值。
唯一的 这个错误剩下的两个来源我可以看到是: 有一些 NA
的非生物数据,但这对我来说从来没有成为一个问题,因为这是我的工作。na.action
的默认处理缺失数据。我还注意到有一些列的总和是0(为了在多个数据集之间进行比较而留下的)。如果这可能会导致问题,那么我是否可以通过某种方式将其子集为 colSums != 0
来快速修剪这些列?如果没有,我还可以从哪里寻找到这个错误的来源?
更新:我已经删除了 colSums = 0
. 无效果.更新2:删除NA没有效果。
如果你不使用公式接口 na.action
不适用,你也没有使用公式接口。
虽然我并不推荐,但你展示的代码中直接基于公式的替代方法是。
rda(bio_data ~ ., data = abio_data, na.action = na.exclude)
(然而,在测试中,即使是这样,似乎也不排除所有的... ) NA
如果它们存在于两个数据帧中。)
我不建议人们这样做,因为使用 .
是懒惰的,并且促进了约束性排序的不良统计实践。相反,我们应该在公式的右侧明确指定模型中想要的项。
如果你想继续使用默认的传递两个矩阵的接口,你需要可以使用 complete.cases()
在两个数据框上得到表示哪些行没有缺失数据的向量。取这些逻辑向量的联合,得到无缺失值的共同行集,并利用联合对两个数据框进行子集,只选择无缺失数据的共同行集。
set.seed(1)
df1 <- matrix(rpois(10*20, lambda = 5), ncol = 10)
df2 <- matrix(rlnorm(5*20), ncol = 5)
df1[sample(10*20, 5)] <- NA
df2[sample(5*20, 5)] <- NA
df1 <- as.data.frame(df1)
df2 <- as.data.frame(df2)
c1 <- complete.cases(df1)
c2 <- complete.cases(df2)
c12 <- c1 & c2
df1_sub <- df1[c12, ]
df2_sub <- df2[c12, ]
library('vegan')
ord <- rda(df1_sub, df2_sub)