【问题标题】:Error for large list (arguments imply differing number of rows) using EstimateD function (iNext package) (R)使用 EstimateD 函数(iNext 包)(R)的大列表错误(参数暗示不同的行数)
【发布时间】:2021-02-16 14:25:06
【问题描述】:

我很难将 iNEXT 包中的 estimateD 函数应用于我自己的数据。我正在研究蜜蜂,我有一个非常大的数据集,其中包含覆盖特定区域的网格单元格中的记录计数。我想通过按大小稀疏来计算每个网格单元的希尔多样性(以及按覆盖率,这两种方法都不适用于我自己的数据,但在这里我报告了我使用 base="size" 参数得到的错误)

为了使用该函数,我使用了一个物种 x 位点(=网格单元)矩阵并将其转换为一个列表,如函数的表示形式:

library(iNEXT)
data(spider)
iNEXT::estimateD(spider, datatype="abundance", base="size", level=NULL, conf=NULL)

我有 4428 个网格单元的 656 种蜜蜂的数据。在所有数据上运行该函数时,出现以下错误: Data.frame(..., check.names = FALSE) 中的错误: 参数意味着不同的行数

但是,当使用较少数量的网格单元对列表进行子集时,该函数可能会成功。这是一个代表。 reprex 包含 67 个不同的网格单元。我必须道歉,但这是我得到错误的最小子集。

List1=list(col1 = c(4, 2, 1, 1, 1, 2, 3, 2, 2, 2, 1), col2 = c(1, 3,3, 3, 3, 3, 3, 4, 3, 3, 3, 1, 3, 3, 3),
           col3 = c(3, 6, 2, 1,7, 7, 5), col4 = c(2, 4, 2, 3, 3, 2, 4, 5, 5, 4, 3, 5, 3),
           col5 = c(6,1, 3, 4, 2, 2, 2), col6 = c(4, 8, 1, 1, 4, 1, 8, 9, 5, 2, 9,7, 1, 11, 4, 1, 2),
           col7 = c(1, 1, 2, 1, 2, 3, 7, 8, 5, 6, 6, 4, 10, 1, 1, 1), col8 = c(2, 1, 3, 1, 1, 1, 1, 2, 2, 1, 2, 2,2, 2, 1, 2, 1),
           col9 = c(2, 4, 4, 3, 3, 3, 2, 2, 5), col10 = c(3,2, 2, 2, 5, 4, 4, 5, 1), 
           col11 = c(4, 2, 2, 4, 3, 2, 4, 4, 2, 4, 1), col12 = c(1, 1, 3, 1, 3, 2, 1, 5, 6, 2, 5),
           col13 = c(2,4, 2, 1, 1, 5, 1, 2, 4, 2, 3, 1, 2, 1, 1), 
           col14 = c(3, 2, 14,31, 8, 3, 1, 7, 5, 21, 6, 21, 43, 26, 2, 33, 16, 20, 7, 3, 18, 2, 1, 1), 
           col15 = c(2, 2, 10, 2, 3, 2, 5, 2, 9, 1, 8, 6, 7, 3, 7, 1, 2, 2, 5, 1, 1, 1, 1, 3, 1, 3),
           col16 = c(4, 1, 1, 1, 4,3, 1, 1, 3, 1, 1),
           col17 = c(4, 8, 1, 1, 1, 1, 1, 2, 1), col18 = c(3,2, 1, 2, 1, 1, 1, 1, 3, 3, 1, 2, 2, 1, 1, 1, 2, 1, 2, 1),
           col19 = c(4,4, 4, 9, 2, 7, 6, 2, 9), col20 = c(3, 4, 1, 2, 5, 4, 1, 1, 2), 
           col21 = c(2, 2, 2, 1, 1, 3, 1, 2, 1, 1, 2, 2, 1, 1), col22 = c(2, 7, 1, 1, 2, 2, 5, 3, 3, 1, 1, 4, 2), 
           col23 = c(1, 5, 1, 1,3, 2, 1, 1, 1, 2, 2, 2, 3, 1, 2, 1, 2, 2, 1, 1), 
           col24 = c(7, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1), col25 = c(3, 3, 1, 3, 3,3, 3, 1, 2, 4, 3, 5), 
           col26 = c(11, 2, 1, 7, 5, 8, 11), col27 = c(3,4, 10, 1, 10, 3, 9), col28 = c(4, 1, 1, 4, 1, 2, 3, 1, 3), 
           col29 = c(3, 1, 1, 2, 3, 4, 2, 2, 4, 5, 10, 1, 6, 2, 6, 1,6, 8, 11, 1, 1, 1, 1), 
           col30 = c(5, 1, 2, 2, 3, 3, 3, 1,2, 2, 2, 1, 1, 1, 3, 1, 1), 
           col31 = c(2, 5, 4, 2, 1, 1, 1,1, 1, 1, 1, 2, 3, 1, 1, 1), 
           col32 = c(2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), 
           col33 = c(4, 1, 2,2, 5, 3, 2, 6, 7, 2, 3, 5), 
           col34 = c(1, 3, 1, 3, 3, 7, 1,1, 2, 2), col35 = c(1, 7, 6, 2, 7, 12, 2, 2, 3, 3, 2, 7), 
           col36 = c(6, 1, 3, 1, 14, 3, 2, 4, 1), col37 = c(5, 2, 1,1, 2, 1, 1, 2, 3, 1, 1, 3, 1), 
           col38 = c(1, 1, 1, 1, 1, 1,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), col39 = c(4, 2,2, 1, 2, 4, 2, 2, 2), 
           col40 = c(2, 3, 1, 3, 4, 4, 1, 3, 4,1), col41 = c(2, 1, 2, 2, 2, 4, 5, 6, 6, 13, 7, 10, 3, 8,1, 1, 1, 1, 1),
           col42 = c(4, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3), 
           col43 = c(3, 1, 2, 1, 3, 2, 3, 2, 3, 2), col44 = c(3,1, 1, 1, 5, 3, 1, 3, 2, 1), 
           col45 = c(3, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 2, 5, 1, 2, 2), col46 = c(1, 5, 4, 1, 1, 2, 1,2, 2, 1, 5, 3, 2, 4, 2, 1, 2, 2), 
           col47 = c(3, 3, 2, 1, 2, 1, 2, 4, 1, 2, 1), col48 = c(2, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 2, 2, 5, 1, 3, 6),
           col49 = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 3, 1), 
           col50 = c(4, 1, 5, 1, 5, 4, 6, 9, 5, 10, 14, 2, 4, 6, 4), col51 = c(1,3, 2, 3, 5, 4, 2, 1, 3, 2), 
           col52 = c(1, 3, 2, 3, 3, 2, 3,2, 2, 2, 1, 2, 4), col53 = c(3, 1, 2, 3, 2, 4, 2, 3, 2, 2), 
           col54 = c(7, 6, 6, 7, 3, 1, 1, 3, 1, 1),
           col55 = c(4, 1, 3, 4, 2, 1, 2, 4, 1, 4, 4, 4, 1), col56 = c(2, 3, 3, 1,3, 4, 2, 2, 2, 4), 
           col57 = c(1, 1, 4, 6, 2, 7, 4, 3, 10,7, 3, 1, 9, 3), col58 = c(5, 5, 1, 1, 3, 3, 3, 4, 2, 2, 2), 
           col59 = c(8, 8, 2, 3, 2, 2, 2, 1, 3, 1, 2, 2, 2, 1), col60 = c(4,1, 2, 6, 3, 2, 1, 2, 3, 1, 2, 3, 2, 1), 
           col61 = c(6, 2, 2,2, 4, 2, 2, 5, 5, 1, 2, 6, 2, 1), 
           col62 = c(7, 5, 8, 3, 1,2, 2, 2, 2, 1, 3, 1, 1, 1, 3, 1, 3, 2, 3, 1, 1, 3, 1, 1), 
           col63 = c(2, 3, 3, 1, 3, 1, 4, 1, 4, 3, 2, 4), col64 = c(3,2, 3, 2, 2, 5, 2, 3, 6, 1, 6, 5, 2, 6, 1, 3), 
           col65 = c(1, 2, 2, 1, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1), 
           col66 = c(3, 2,1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 3, 5, 1, 1, 4, 1,1, 1, 3, 1), 
           col67 = c(4, 3, 2, 2, 1, 1, 1, 2, 2, 1, 2))

by_size <- iNEXT::estimateD(List1,
                            datatype = "abundance", base = "size",
                            level=NULL, conf=NULL)
#Error in data.frame(..., check.names = FALSE) : 
#arguments imply differing number of rows: 67, 66

我提供的列表没有零,因此每个网格单元都没有相同数量的物种,但每个网格单元具有相同数量的物种(零)出现相同的错误。我这样做是为了尽可能减少 reprex。

现在,如果我们通过删除一个(或更多)网格单元来减少列表,则该函数可以工作:

List2=List1[1:66]
by_size2 <- iNEXT::estimateD(List2,
                            datatype = "abundance", base = "size",
                            level=NULL, conf=NULL)

我只是想了解它为什么会产生这样的错误。如果你们中的任何人已经遇到过这个问题,请告诉我。我很高兴至少有关于如何进行的建议或解释为什么它不起作用。

非常感谢您!

【问题讨论】:

    标签: r inext


    【解决方案1】:

    我没有答案,但是当您减去最后一行之外的另一行时,您的示例也会失败。所以看来问题不在于列表长度本身。

    List3=List1[-66]
    by_size3 <- iNEXT::estimateD(List3,
                                datatype = "abundance", base = "size",
                                level=NULL, conf=NULL)
    #Error in data.frame(..., check.names = FALSE) : 
    #  arguments imply differing number of rows: 66, 65
    

    我来到这里是因为我在同一个包中偶然发现了一个可能相关的问题。 iNEXT 函数中的非命名列表也会产生类似的错误。

    test_data <- list(matrix(sample(c(0,1), 100, replace = T),
                             ncol = 10, 
                             dimnames = list(paste("species_", 1:10),
                                          NULL)),
                      matrix(sample(c(0,1), 100, replace = T),
                             ncol = 10, 
                             dimnames = list(paste("species_", 1:10),
                                          NULL))
                      )
    
    iNEXT(test_data,
          datatype = "incidence_raw")
    #Error in data.frame(site = rownames(out), out) : 
    #  arguments imply differing number of rows: 0, 2
    
    #While this works
    names(test_data)
    names(test_data) <- c("community_1", "community_2")
    
    iNEXT(test_data,
          datatype = "incidence_raw")
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    相关资源
    最近更新 更多