r - 什么相当于 do.call(rbind, list)?

标签 r

在我的真实数据中,我收到警告结果的列数不是向量长度(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:我不想更改列表的类或str

最佳答案

请注意:查看

> 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 也可能是有效的替代方案。

关于r - 什么相当于 do.call(rbind, list)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37459677/

相关文章:

function - 计算连续输赢的大小

regex - 在强(基础)中大写第一个单词的最快方法

R Shiny 的对象范围

r - 将日期时间字符串转换为 R 中带时间的日期

r - 如何为因子变量的每个级别应用函数?

r - 从字符串中提取 "words"

r - R 中的包 rgl 未在 Mac OS 中加载

r - 将data.frame转换为Zoo

r - 在 case_when() 中抛出错误

python - 什么是 Python 的 View() dataframe 命令的等价物?