2012-05-07 73 views
6

我有一個R腳本來加載目錄中的多個文本文件並將數據保存爲壓縮的.rda。它看起來像這樣,在目錄中加載新文件

#!/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!") 

的文件是相當大的(每15兆字節,它們通常是50),因此運行此腳本需要長達幾分鐘的時間通常,其中的很大一部分是採取書面.rda結果。

我經常用新的數據文件更新目錄,因此我想將它們追加到以前保存和壓縮的數據中。這是我通過檢查是否已經有一個名稱的輸出文件。最後一步仍然很慢,保存.rda文件。

在某些軟件包中是否有更智能的方法來解決這個問題,保持已讀過的文件的跟蹤並將其更快地保存?

我看到knitr使用tools:::makeLazyLoadDB來保存它的緩存計算,但是這個函數沒有記錄,所以我不確定它在哪裏使用它是有意義的。

回答

6

爲此我需要讀取(或寫)的中間文件的時候,我用

save (..., compress = FALSE) 

這大大加快了東西。

+0

確實要快得多,謝謝。 – baptiste