If you have all the numeric data, you can first convert them to a matrix, which can be significantly faster than data frames:
> microbenchmark( do.call(cbind, rep(list(sleep), 1000)), do.call(cbind, rep(list(as.matrix(sleep)), 1000)) ) Unit: microseconds expr min lq mean do.call(cbind, rep(list(sleep), 1000)) 6978.635 7496.690 8038.21531 do.call(cbind, rep(list(as.matrix(sleep)), 1000)) 636.282 722.814 862.01125 median uq max neval 7864.180 8397.8595 12213.473 100 744.647 793.0695 7416.430 100
Alternatively, if you need a data frame, you can cheat using unlist , and then manually set the class:
df <- unlist(rep(list(sleep), 1000), recursive=FALSE) class(df) <- 'data.frame'
source share