【问题标题】:what is equivalent to do.call(rbind, list)?什么相当于 do.call(rbind, list)?
【发布时间】:2016-09-24 09:19:21
【问题描述】:

在我的真实数据中,我得到了warning number of columns of result is not a multiple of vector length (arg 1),虽然我的列表有唯一的列数,但当我使用do.call("rbind"

我想尝试产生与 do.call(rbind, list) 相同输出的其他方法,以检查问题是否在我的列表中。

例子

       n = c(2, 3, 5,4) 
       n1 = c(2, 7, 4,6) 
       n2 = c(NA, NA, NA,NA) 
       x = list(n, n1, n2)
      dat <- do.call("rbind", x)

我试过了:

      df=matrix(as.numeric(unlist(x)), nrow= 3)

但是

      identical(dat,df)
     > identical(dat,df)
      [1] FALSE

PS:我不想改class or str of my list

【问题讨论】:

    标签: r


    【解决方案1】:

    请注意:正在查看

    > dat
         [,1] [,2] [,3] [,4]
    [1,]    2    3    5    4
    [2,]    2    7    4    6
    [3,]   NA   NA   NA   NA
    > df
         [,1] [,2] [,3] [,4]
    [1,]    2    4    4   NA
    [2,]    3    2    6   NA
    [3,]    5    7   NA   NA
    

    我对这个结果并不感到惊讶

    identical(dat,df)
    [1] FALSE
    

    不过,看看

    df=matrix(as.numeric(unlist(x)), nrow= 3, byrow = T)
    identical(dat,df)
    [1] TRUE
    

    do.call(rbind, list)的替代方案

    如果您正在寻找do.call 的替代品,请查看dplyr::bind_rows(它以数据帧为基础,非常高效)。第二种选择可能是Reduce,如:

    Reduce(rbind, x)
         [,1] [,2] [,3] [,4]
    init    2    3    5    4
            2    7    4    6
           NA   NA   NA   NA
    

    另一种选择是data.table::rbindlist,它以列表(!)为食。请注意,输出将被转置,这意味着每一行将显示为一列。见

    library(data.table)
    rbindlist(list(x))
       V1 V2 V3
    1:  2  2 NA
    2:  3  7 NA
    3:  5  4 NA
    4:  4  6 NA
    

    不过,您可以将其包装成 t() 以转置结果。

    不过,更一般地说,如果您想检查列表中的所有元素是否具有相同的长度,您可能会更成功地找到类似

    的错误
    sapply(x, length)
    [1] 4 4 4
    

    或者根据您的实际数据的样子,使用诸如ncol 左右的变体而不是length。如果列表元素有列名,那么names 也可能是一个有效的替代方案。

    【讨论】:

      【解决方案2】:

      您需要添加byrow = TRUE:

      df=matrix(as.numeric(unlist(x)), nrow= 3, byrow = TRUE)
      

      【讨论】:

        猜你喜欢
        • 2023-03-05
        • 1970-01-01
        • 2013-08-30
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多