【问题标题】:Resolving 'qr and y must have the same number of rows' when the dimensions are the same当维度相同时解决'qr和y必须具有相同的行数'
【发布时间】:2020-05-11 18:03:04
【问题描述】:

核心问题:可以对“'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。运行类型检查,所有数据都是数字。

我能看到的唯一两个剩余的错误来源是:非生物数据中有许多NAs,但这对我来说从来都不是问题@ 987654324@ 的默认处理缺失数据。我还要注意,有些列的总和为 0(用于在多个数据集之间进行比较)。如果这可能导致问题,我可以通过colSums != 0 以某种方式子集以快速修剪这些列吗?如果没有,我还能在哪里查找此错误的来源?

更新:我已删除 colSums = 0。没有效果。 更新 2:删除 NA 无效

【问题讨论】:

    标签: r vegan


    【解决方案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)
    

    【讨论】:

    • 谢谢。这有助于解决 NA 问题,但我的核心问题仍然是我的 qr 矩阵具有奇怪的尺寸。话虽如此,停电导致硬重置:我不再收到此错误。代码恶魔?
    猜你喜欢
    • 2016-11-10
    • 2017-10-23
    • 2017-10-07
    • 1970-01-01
    • 2021-06-05
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多