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.
thực sự là nhanh hơn rất nhiều, cảm ơn. – baptiste