ディレクトリに複数のテキストファイルをロードし、圧縮された.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
を使用するのを見ましたが、この関数は文書化されていないため、どこで使うのが分かりません。私が読んで(または書き込み)する必要があり、中間ファイルの場合
本当に感謝します。 – baptiste