Мы unlist
list
(при условии, что существует один элемент списка и split
он основан на names
из list
split(unlist(lst1, use.names = FALSE), names(lst1))
#$a
#[1] 1 2 3
#$b
#[1] 4 5
#$c
#[1] 6
Для общегорегистр, то есть элементы с length
больше 1
with(stack(lst1), split(values, ind))
Однако stack
будет немного медленным для больших наборов данных, поэтому в этом случае используйте split
с lengths
split(unlist(lst1), rep(names(lst1), lengths(lst1)))
Тесты
Тесты для большого набора данных
lst2 <- rep(lst1, 1e5)
system.time(split(unlist(lst2, use.names = FALSE), names(lst2)))
# user system elapsed
# 0.067 0.009 0.076
system.time(unstack(stack(lst2)))
# user system elapsed
# 0.696 0.031 0.681
system.time(with(stack(lst2), split(values, ind)))
# user system elapsed
# 0.447 0.027 0.475
system.time(split(unlist(lst2), rep(names(lst2), lengths(lst2))))
# user system elapsed
# 0.100 0.005 0.105
data
lst1 <- list(a = 1, a = 2, a = 3, b = 4, b = 5, c = 6)