Возможно, это не самое элегантное или эффективное решение, но я предлагаю сначала создать список из tableX
s для данного числа X
. Затем сделайте rbind
в этом списке и поместите вывод в новый список, проиндексированный должным образом. Возможно, вам придется изменить в зависимости от особенностей ваших фактических данных - я предполагаю, что каждый список в вашем списке имеет все tableX, и что они упорядочены.
См. Ниже:
library(data.table)
library(testthat)
dt.list <- list(list(table1=data.table(A1=1:3, B1=2:4),
table2=data.table(A2=3:1, B2=4:2)),
list(table1=data.table(A1=-1:3, B1=-2:2),
table2=data.table(A2=-3:1, B2=-4:0)),
list(table1=data.table(A1=1:3, B1=2:4),
table2=data.table(A2=3:1, B2=4:2)))
dt.output <-
list(table1=data.table(A1=c(1:3, -1:3, 1:3), B1=c(2:4, -2:2, 2:4)),
table2=data.table(A2=c(3:1, -3:1, 3:1), B2=c(4:2, -4:0, 4:2)))
# Extract number of tableX's -- assuming same number in each list element.
mylist <- vector(mode = "list", length = length(dt.list[[1]]))
for (li in seq(length(mylist))) {
# Extract tableXs, put into list.
list.tableX <- lapply(dt.list, function(x) {
return(x[[li]])
})
# Use rbind to put together
mylist[[li]] <- do.call("rbind", list.tableX)
names(mylist)[li] <- paste0("table", li)
}
testthat::expect_identical(dt.output, mylist)