Every solution I have found seems to only apply when every object in a list has the same length. I needed to convert a list to a data.frame when the length of the objects in the list were of unequal length. Below is the base R solution I came up with. It no doubt is very inefficient, but it does seem to work.
x1 <- c(2, 13) x2 <- c(2, 4, 6, 9, 11, 13) x3 <- c(1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8, 9, 9, 10, 11, 11, 12, 13, 13) my.results <- list(x1, x2, x3) # identify length of each list my.lengths <- unlist(lapply(my.results, function (x) { length(unlist(x))})) my.lengths #[1] 2 6 20 # create a vector of values in all lists my.values <- as.numeric(unlist(c(do.call(rbind, lapply(my.results, as.data.frame))))) my.values #[1] 2 13 2 4 6 9 11 13 1 1 2 3 3 4 5 5 6 7 7 8 9 9 10 11 11 12 13 13 my.matrix <- matrix(NA, nrow = max(my.lengths), ncol = length(my.lengths)) my.cumsum <- cumsum(my.lengths) mm <- 1 for(i in 1:length(my.lengths)) { my.matrix[1:my.lengths[i],i] <- my.values[mm:my.cumsum[i]] mm <- my.cumsum[i]+1 } my.df <- as.data.frame(my.matrix) my.df # V1 V2 V3 #1 2 2 1 #2 13 4 1 #3 NA 6 2 #4 NA 9 3 #5 NA 11 3 #6 NA 13 4 #7 NA NA 5 #8 NA NA 5 #9 NA NA 6 #10 NA NA 7 #11 NA NA 7 #12 NA NA 8 #13 NA NA 9 #14 NA NA 9 #15 NA NA 10 #16 NA NA 11 #17 NA NA 11 #18 NA NA 12 #19 NA NA 13 #20 NA NA 13