Đọc ~ 5x10^6 giá trị số vào R từ một tệp văn bản tương đối chậm trên máy của tôi (một vài giây và tôi đọc một số tệp như vậy), ngay cả với scan(..., what="numeric", nmax=5000)
hoặc các thủ thuật tương tự. Có thể đáng để thử một trình bao bọc Rcpp
cho loại tác vụ này (ví dụ: Armadillo
có một vài tiện ích để đọc tệp văn bản) không? Hoặc tôi có thể lãng phí thời gian của tôi cho ít hoặc không đạt được hiệu suất vì chi phí giao diện dự kiến? Tôi không chắc chắn những gì hiện đang hạn chế tốc độ (hiệu suất máy nội tại, hoặc người nào khác?) Đó là một nhiệm vụ mà tôi lặp lại nhiều lần trong ngày, thông thường, và định dạng tập tin luôn giống nhau, 1000 cột, khoảng 5000 hàng.nhanh hơn quét() với Rcpp?
Đây là tệp mẫu để phát, nếu cần.
nr <- 5000
nc <- 1000
m <- matrix(round(rnorm(nr*nc),3),nr=nr)
cat(m[1, -1], "\n", file = "test.txt") # first line is shorter
write.table(m[-1, ], file = "test.txt", append=TRUE,
row.names = FALSE, col.names = FALSE)
Cập nhật: Tôi cố gắng read.csv.sql
và cũng load("test.txt", arma::raw_ascii)
bằng Armadillo và cả hai đều chậm hơn so với các giải pháp scan
.
Hãy thử 'read.csv.sql' trong sqldf và xem có nhanh hơn không. Chỉ một dòng mã của nó. http://sqldf.googlecode.com –
Tôi đã thử 'system.time (b <- read.csv.sql (" test.txt ", header = FALSE, sep =" "))' và nó chậm hơn 'hệ thống .time (a <- scan ("test.txt", what = "numeric")) '. Ngoài ra, tôi cho rằng việc lưu trữ dữ liệu vào một ma trận sẽ hiệu quả hơn vào một 'data.frame' – baptiste