在目录中加载新文件

时间:2012-05-07 10:30:22

标签: r

我有一个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!")

文件非常大(每个15Mb,通常为50个),因此运行此脚本通常需要几分钟时间,其中很大一部分用于编写.rda结果。

我经常使用新数据文件更新目录,因此我想将它们附加到以前保存和压缩的数据中。这是我上面做的,检查是否已经有一个具有该名称的输出文件。最后一步仍然很慢,保存了.rda文件。

在某些软件包中是否有更明智的方法可以解决这个问题,保留一些已读取的文件,并将其保存得更快?

我看到knitr使用tools:::makeLazyLoadDB来保存其缓存的计算,但是这个函数没有记录,所以我不确定使用它的意义何在。

1 个答案:

答案 0 :(得分:6)

对于我需要经常阅读(或写入)的中间文件,我使用

save (..., compress = FALSE)

可以大大加快速度。

相关问题