如何简化此 R 代码以 rbind 列表的所有表?

How to simplify this R code to rbind all the tables of a list?

必须有一个简单的方法来绑定列表中的所有表,怎么做?

rbind(tempOut[[1]], tempOut[[2]], tempOut[[3]], tempOut[[4]], 
                 tempOut[[5]], tempOut[[6]], tempOut[[7]], tempOut[[8]], 
                 tempOut[[9]], tempOut[[10]], tempOut[[11]], tempOut[[12]],
                 tempOut[[13]], tempOut[[14]], tempOut[[15]], tempOut[[16]],
                 tempOut[[17]], tempOut[[18]], tempOut[[19]], tempOut[[20]],
                 tempOut[[21]], tempOut[[22]], tempOut[[23]], tempOut[[24]],
                 tempOut[[25]], tempOut[[26]], tempOut[[27]], tempOut[[28]], 
                 tempOut[[29]], tempOut[[30]], tempOut[[31]], tempOut[[32]])

1) do.call 使用第一行提供可重现的测试输入(其中 BOD 是内置的 6 行数据框)我们使用 do.callrbind 如图所示。没有使用包。

tempOut <- list(BOD, 10*BOD, 100*BOD) # test input

do.call("rbind", tempOut)

给予:

   Time demand
1     1    8.3
2     2   10.3
3     3   19.0
4     4   16.0
5     5   15.6
6     7   19.8
7    10   83.0
8    20  103.0
9    30  190.0
10   40  160.0
11   50  156.0
12   70  198.0
13  100  830.0
14  200 1030.0
15  300 1900.0
16  400 1600.0
17  500 1560.0
18  700 1980.0

2) Reduce 第二个替代碱基是:

Reduce("rbind", tempOut)

3) packages 还有一些包提供了这个功能,包括 data.table 中的 rbindlist,dplyr 中的 bind_rowsrbind.fill 在 plyr 中。

3a) purrr::map_dfr 如果您想跟踪 table 每行来自哪一个,特别感兴趣的是 purrr 解决方案——另请注意根据@Henrik 的评论,data.table 的 rbindlist 有一个 idcol= 参数。

library(dplyr) # map_dfr from purrr also requires dplyr
library(purrr)
map_dfr(tempOut, identity, .id = "id")

给予:

   id Time demand
1   1    1    8.3
2   1    2   10.3
3   1    3   19.0
4   1    4   16.0
5   1    5   15.6
6   1    7   19.8
7   2   10   83.0
8   2   20  103.0
9   2   30  190.0
10  2   40  160.0
11  2   50  156.0
12  2   70  198.0
13  3  100  830.0
14  3  200 1030.0
15  3  300 1900.0
16  3  400 1600.0
17  3  500 1560.0
18  3  700 1980.0