Ho 15 milioni di file CSV, ciascuno con due colonne (integer e float) e tra 5 e 500 righe. Ogni file simile a:Il modo più veloce per importare milioni di file in R?
3453,0.034
31,0.031
567,0.456
...
Attualmente, sto iterare su tutti i file, e l'utilizzo di read.csv()
per importare ciascun file in una grande lista. Ecco una versione semplificata:
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")
Più tardi nel mio codice, vado indietro attraverso ogni matrice nella lista, e calcolare alcuni parametri.
Dopo aver avviato questo processo di importazione, sembra che richieda l'ordine da 3 a 5 giorni per il completamento. C'è un modo più veloce per farlo?
EDIT: Ho aggiunto ulteriori dettagli sul mio codice.
possibile duplicato del [rapida lettura tabelle molto grandi come dataframes in R] (http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r) – joran
Che cosa stai cercando di fare? Crea una singola matrice con tutti i dati, oppure leggi ed elabora separatamente ciascuna matrice? –
Questo è rilevante per il caricamento di molti file contemporaneamente: http://stackoverflow.com/questions/3764292/ – Ben