2012-05-07 42 views
6

Tôi có một tập lệnh R để tải nhiều tệp văn bản vào một thư mục và lưu dữ liệu dưới dạng .rda đã nén. Nó trông giống như thế này,tải các tệp mới trong thư mục

#!/usr/bin/Rscript --vanilla 

args <- commandArgs(TRUE) 
## arg[1] is the folder name 

outname <- paste(args[1], ".rda", sep="") 

files <- list.files(path=args[1], pattern=".txt", full=TRUE) 

tmp <- list() 
if(file.exists(outname)){ 
    message("found ", outname) 
    load(outname) 
    tmp <- get(args[1]) # previously read stuff 
    files <- setdiff(files, names(tmp)) 

} 

if(is.null(files)) 
    message("no new files") else { 

## read the files into a list of matrices 
results <- plyr::llply(files, read.table, .progress="text") 
names(results) <- files 

assign(args[1], c(tmp, results)) 
message("now saving... ", args[1]) 
save(list=args[1], file=outname) 
} 
message("all done!") 

Các tập tin khá lớn (15MB mỗi, 50 trong số họ thường), do đó chạy kịch bản này phải mất đến vài phút thông thường, một phần đáng kể trong số đó được thực hiện bằng văn bản cho .rda các kết quả.

Tôi thường cập nhật thư mục với các tệp dữ liệu mới, do đó, tôi muốn nối thêm chúng vào dữ liệu được lưu và nén trước đó. Đây là những gì tôi làm ở trên bằng cách kiểm tra nếu đã có một tập tin đầu ra với tên đó. Bước cuối cùng vẫn còn khá chậm, lưu tệp .rda.

Có cách nào thông minh hơn để thực hiện việc này trong gói nào đó hay không, việc theo dõi tệp nào đã được đọc và lưu nhanh hơn?

Tôi thấy rằng knitr sử dụng tools:::makeLazyLoadDB để lưu các tính toán được lưu trong bộ nhớ cache, nhưng chức năng này không được ghi chép nên tôi không chắc chắn nên sử dụng nó ở đâu.

Trả lời

6

Đối với các file trung gian mà tôi cần phải đọc (hoặc viết) thường, tôi sử dụng

save (..., compress = FALSE) 

mà tăng tốc độ điều đáng kể.

+0

thực sự là nhanh hơn rất nhiều, cảm ơn. – baptiste

Các vấn đề liên quan