Как указано в комментариях @ PKumar , в базе R мы можем использовать do.call(rbind)
. Просто поместите это в функцию.
stackDataInList <- function(x) {
return(do.call(rbind, x))
}
stackDataInList(L[1])
# ID value
# 1 a 0.9101742
# 2 b 0.3841854
# 3 c 1.6821761
stackDataInList(L[c(1, 3, 4)])
# ID value
# 1 a 0.9101742
# 2 b 0.3841854
# 3 c 1.6821761
# 4 f 1.4322822
# 5 g -0.6506964
# 6 h -0.2073807
# 7 i -0.3928079
# 8 j -0.3199929
# 9 k -0.2791133
# 10 l 0.4941883
Или используйте stack
и mapply
:
stackDataInList2 <- function(x) setNames(cbind.data.frame(stack(mapply(`[`, x, 1))[[1]],
stack(mapply(`[`, x, 2))[[1]]),
names(x[[1]]))
stackDataInList2(L[1])
# ID value
# 1 a 0.9101742
# 2 b 0.3841854
# 3 c 1.6821761
stackDataInList2(L[c(1, 3, 4)])
# ID value
# 1 a 0.9101742
# 2 b 0.3841854
# 3 c 1.6821761
# 4 f 1.4322822
# 5 g -0.6506964
# 6 h -0.2073807
# 7 i -0.3928079
# 8 j -0.3199929
# 9 k -0.2791133
# 10 l 0.4941883
Также Reduce
- опция, найденная здесь
stackDataInList3 <- function(x) Reduce(rbind, x)
stackDataInList3(L[1])
# ID value
# 1 a 0.9101742
# 2 b 0.3841854
# 3 c 1.6821761
stackDataInList3(L[c(1, 3, 4)])
# ID value
# 1 a 0.9101742
# 2 b 0.3841854
# 3 c 1.6821761
# 4 f 1.4322822
# 5 g -0.6506964
# 6 h -0.2073807
# 7 i -0.3928079
# 8 j -0.3199929
# 9 k -0.2791133
# 10 l 0.4941883
Данные
L <- list(structure(list(ID = c("a", "b", "c"), value = c(0.9101742,
0.3841854, 1.6821761)), row.names = c(NA, -3L), class = "data.frame"),
structure(list(ID = c("d", "e"), value = c(-0.6357365, -0.4616447
)), row.names = c(NA, -2L), class = "data.frame"), structure(list(
ID = c("f", "g", "h", "i"), value = c(1.4322822, -0.6506964,
-0.2073807, -0.3928079)), row.names = c(NA, -4L), class = "data.frame"),
structure(list(ID = c("j", "k", "l"), value = c(-0.3199929,
-0.2791133, 0.4941883)), row.names = c(NA, -3L), class = "data.frame"))