2012-05-07 12 views
6

ディレクトリに複数のテキストファイルをロードし、圧縮された.rdaとしてデータを保存するRスクリプトがあります。それはディレクトリに新しいファイルをロードする

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

ファイルは(一般的に、各それらの50 15MB)は非常に大きく、このようになりますので、このスクリプトを実行すると、.rdaを書いて取られたのかなりの部分、典型的には数分ほどかかります結果。

私はしばしば新しいデータファイルでディレクトリを更新するので、以前に保存し圧縮したデータに追加したいと思います。これは、すでにその名前の出力ファイルがあるかどうかを調べることによって、私が上で行うことです。最後のステップはまだかなり遅く、.rdaファイルを保存します。

これはいくつかのパッケージでどのファイルを読み取ったかの追跡を保ち、これをより速く保存するよりスマートな方法ですか?

私は、knitrがキャッシュ計算を保存するのにtools:::makeLazyLoadDBを使用するのを見ましたが、この関数は文書化されていないため、どこで使うのが分かりません。私が読んで(または書き込み)する必要があり、中間ファイルの場合

答えて

6

は、多くの場合、私はかなり物事をスピードアップ

save (..., compress = FALSE) 

使用しています。

+0

本当に感謝します。 – baptiste

関連する問題