Не знаю о наиболее эффективных, но используя ваш список:
l <- list(a=c("a1","a2"), b=c("b1","b2"), c="c1")
мы можем получить длину каждого компонента, используя sapply()
lens <- sapply(l, length)
мы просто повторяемимена l
lens
количество раз и unlist l
- здесь делается в одной строке:
cbind(rep(names(l), times = sapply(l, length)), unlist(l))
, что дает желаемый результат:
R> cbind(rep(names(l), times = sapply(l, length)), unlist(l))
[,1] [,2]
a1 "a" "a1"
a2 "a" "a2"
b1 "b" "b1"
b2 "b" "b2"
c "c" "c1"