do.call в списках очень элегантно и быстро. Фактически do.call (rbind, my.list) однажды спас мою задницу, когда мне нужно было объединить огромный список. Это было самое быстрое решение.
Чтобы решить вашу проблему, может быть что-то вроде:
do.call(rbind, lapply(foo, unlist))
> result.2 <- do.call(rbind, lapply(foo, unlist))
> result.2
a b
[1,] 1 2
[2,] 11 22
[3,] 111 222
> result.2[, 'a']
[1] 1 11 111
>