tôi nghĩ bạn muốn
output <- do.call(rbind,lapply(z,matrix,ncol=10,byrow=TRUE))
tức là kết hợp sử dụng @do.call(rbind,...)
BlueMagister với một tuyên bố lapply
để chuyển đổi các yếu tố danh sách cá nhân vào 11 * 10 ma trận ...
Benchmarks (hiển thị @ giải pháp unlist
của flodel nhanh hơn so với tôi và nhanh hơn 230 lần so với phương pháp ban đầu ...)
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
Nếu tỷ lệ này phù hợp (tức là bạn không gặp vấn đề về bộ nhớ), vấn đề đầy đủ sẽ mất khoảng 130 * 0,2 giây = 26 giây trên một máy tính có thể so sánh được (tôi đã làm điều này trên MacBook Pro 2 tuổi).
Nguồn
2012-11-05 01:05:18
Nếu bạn muốn kích thước là 1.430.000 * 11 tại sao bạn đặt ncol là 10? – Dason
Chờ- khi bạn nói rằng mỗi mục có 11 ký tự, bạn có nghĩa là nó là một vectơ với 11 mục? Ban đầu tôi nghĩ rằng mỗi một chuỗi với 11 ký tự trong đó. Bạn có thể hiển thị 'z [1: 2]' làm ví dụ không? –
Cảm ơn Dason và David! Đó là một lỗi đánh máy. Tôi đã sửa chữa nó. – user1787675