Tengo 15 millones de archivos CSV, cada uno con dos columnas (entero y flotante), y entre 5 y 500 filas. Cada archivo se ve algo como:¿La forma más rápida de importar millones de archivos en R?
3453,0.034
31,0.031
567,0.456
...
Actualmente, estoy interactuando sobre todos los archivos, y el uso de read.csv()
importar cada archivo en una lista grande. Aquí hay una versión simplificada:
allFileNames = Sys.glob(sprintf("%s/*/*/results/*/*", dir))
s$scores = list()
for (i in 1:length(allFileNames)){
if ((i %% 1000) == 0){
cat(sprintf("%d of %d\n", i, length(allFileNames)))
}
fileName = allFileNames[i]
approachID = getApproachID(fileName)
bugID = getBugID(fileName)
size = file.info(fileName)$size
if (!is.na(size) && size > 0){ # make sure file exists and is not empty
tmp = read.csv(fileName, header=F, colClasses=c("integer", "numeric"))
colnames(tmp) = c("fileCode", "score")
s$scores[[approachID]][[bugID]] = tmp
} else {
# File does not exist, or is empty.
s$scores[[approachID]][[bugID]] = matrix(-1, ncol=2, nrow=1)
}
}
tmp = read.csv(fileName, header=F, colClasses=c("integer", "numeric")
Más adelante en mi código, volver a través de cada matriz en la lista, y calcular algunas métricas.
Después de iniciar este proceso de importación, parece que tomará del orden de 3 a 5 días para completarse. ¿Hay una manera más rápida de hacer esto?
EDIT: He agregado más detalles sobre mi código.
posible duplicado de [leer rápidamente tablas muy grandes como tramas de datos en R] (http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r) – joran
¿Qué estás tratando de hacer? ¿Construyó una matriz única con todos los datos, o leyó y procesó cada matriz por separado? –
Esto es relevante para cargar muchos archivos a la vez: http://stackoverflow.com/questions/3764292/ – Ben