维度相同时解析'qr and y must have the same number of rows'
Resolving 'qr and y must have the same number of rows' when the dimensions are the same
核心问题:“'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;自传:9865,6。 运行 类型检查,所有数据都是数字。
我能看到的唯一 两个剩余的错误来源是 :非生物数据中有许多 NA
s,但这从来没有之前对我来说是个问题,因为 na.action
的默认值处理丢失的数据。我还注意到有些列的总和为 0(保留用于在多个数据集之间进行比较)。如果这可能导致问题,我能否以某种方式快速将这些列 colSums != 0
子集化为 trim ?如果不是,我还能在哪里查找此错误的来源?
更新:我删除了 colSums = 0
。没有效果。
更新 2:删除 NA 无效
如果您不使用公式界面 na.action
不适用,并且您没有使用公式界面。
虽然我不推荐它,但您显示的代码的基于公式的直接替代方法是:
rda(bio_data ~ ., data = abio_data, na.action = na.exclude)
(但是,在测试中,即使这似乎也没有排除所有 NA
如果它们存在于两个数据框中。)
我不建议人们这样做,因为使用 .
是懒惰的,并且会通过受约束的排序促进不良的统计实践。相反,应该在公式的右侧明确指定模型中所需的项。
如果您希望继续使用传递两个矩阵的默认界面,您需要可以在两个数据帧上使用 complete.cases()
来获取指示哪些行没有缺失数据的向量。将这些逻辑向量并集以获得没有缺失值的公共行集,并使用联合集将两个数据帧子集化为 select 只有公共的非缺失数据集:
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)
核心问题:“'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;自传:9865,6。 运行 类型检查,所有数据都是数字。
我能看到的唯一 两个剩余的错误来源是 :非生物数据中有许多 NA
s,但这从来没有之前对我来说是个问题,因为 na.action
的默认值处理丢失的数据。我还注意到有些列的总和为 0(保留用于在多个数据集之间进行比较)。如果这可能导致问题,我能否以某种方式快速将这些列 colSums != 0
子集化为 trim ?如果不是,我还能在哪里查找此错误的来源?
更新:我删除了 colSums = 0
。没有效果。
更新 2:删除 NA 无效
如果您不使用公式界面 na.action
不适用,并且您没有使用公式界面。
虽然我不推荐它,但您显示的代码的基于公式的直接替代方法是:
rda(bio_data ~ ., data = abio_data, na.action = na.exclude)
(但是,在测试中,即使这似乎也没有排除所有 NA
如果它们存在于两个数据框中。)
我不建议人们这样做,因为使用 .
是懒惰的,并且会通过受约束的排序促进不良的统计实践。相反,应该在公式的右侧明确指定模型中所需的项。
如果您希望继续使用传递两个矩阵的默认界面,您需要可以在两个数据帧上使用 complete.cases()
来获取指示哪些行没有缺失数据的向量。将这些逻辑向量并集以获得没有缺失值的公共行集,并使用联合集将两个数据帧子集化为 select 只有公共的非缺失数据集:
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)