+-
当尺寸相同时,解决 "qr和y的行数必须相同 "的问题。

核心问题。 对于"'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没有效果。

1
投票

如果你不使用公式接口 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)