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
來保存它的緩存計算,但是這個函數沒有記錄,所以我不確定它在哪裏使用它是有意義的。
確實要快得多,謝謝。 – baptiste