2012-05-07 7 views
6

Tengo un script R para cargar varios archivos de texto en un directorio y guardar los datos como .rda comprimido. Parece que este,cargar nuevos archivos en el directorio

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

Los archivos son bastante grandes (15Mb cada uno, 50 de ellos por lo general), por lo que la ejecución de este script toma hasta unos pocos minutos por lo general, una parte sustancial de la cual se toma la escritura .rda resultados.

A menudo actualizo el directorio con nuevos archivos de datos, por lo tanto, me gustaría agregarlos a los datos previamente guardados y comprimidos. Esto es lo que hago arriba al verificar si ya hay un archivo de salida con ese nombre. El último paso sigue siendo bastante lento, guardando el archivo .rda.

¿Existe alguna manera más inteligente de hacer esto en algún paquete, manteniendo un rastro de qué archivos se han leído y guardado esto más rápido?

he visto que la knitr utiliza tools:::makeLazyLoadDB para salvar sus cálculos en caché, pero esta función no está documentada, así que no estoy seguro de donde tiene sentido para usarlo.

Respuesta

6

Para los archivos intermedios que necesito para leer (o escribir) a menudo, utilizo

save (..., compress = FALSE) 

lo que acelera considerablemente las cosas.

+0

es mucho más rápido, gracias. – baptiste

Cuestiones relacionadas