Я думаю вы хотите
output <- do.call(rbind,lapply(z,matrix,ncol=10,byrow=TRUE))
т.е. объединение @ использование BlueMagister о do.call(rbind,...)
с lapply
заявления, чтобы преобразовать отдельные элементы списка в 11 * 10 матриц ...
контрольных показателей (показывая @ Решение flockel unlist
в 5 раз быстрее, чем мое, и в 230 раз быстрее, чем исходный подход ...)
n <- 1000
z <- replicate(n,matrix(1:110,ncol=10,byrow=TRUE),simplify=FALSE)
library(rbenchmark)
origfn <- function(z) {
output <- NULL
for(i in 1:length(z))
output<- rbind(output,matrix(z[[i]],ncol=10,byrow=TRUE))
}
rbindfn <- function(z) do.call(rbind,lapply(z,matrix,ncol=10,byrow=TRUE))
unlistfn <- function(z) matrix(unlist(z), ncol = 10, byrow = TRUE)
## test replications elapsed relative user.self sys.self
## 1 origfn(z) 100 36.467 230.804 34.834 1.540
## 2 rbindfn(z) 100 0.713 4.513 0.708 0.012
## 3 unlistfn(z) 100 0.158 1.000 0.144 0.008
Если этот весы соответствующим образом (т.е. вы не сталкиваетесь с проблемами памяти), полная проблема займет около 130 * 0,2 секунды = 26 секунд на сопоставимой машине (я сделал это на двухлетнем MacBook Pro).
Если вы хотите, размеры быть 1430000 * 11 почему вы устанавливаете ncol как 10? – Dason
Подождите, когда вы говорите, что каждая запись имеет 11 символов, вы имеете в виду, что это вектор с 11 элементами? Первоначально я думал, что каждая из них содержит строку с 11 символами. Вы можете показать 'z [1: 2]' в качестве примера? –
Спасибо Дасону и Дэвиду! Это опечатка. Я исправил это. – user1787675