Mam 15 milionów plików CSV, każdy z dwiema kolumnami (liczbą całkowitą i zmiennoprzecinkową) oraz od 5 do 500 wierszy. Każdy plik wyglądał:Najszybszym sposobem na import milionów plików w R?
3453,0.034
31,0.031
567,0.456
...
Obecnie jestem iteracji po wszystkich plików, a przy użyciu read.csv()
importować każdy plik do wielkiej listy. Oto uproszczona wersja:
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")
Później w moim kodu, wracam za każdym matrycy na liście, i obliczyć pewne dane.
Po rozpoczęciu tego procesu importowania wygląda na to, że jego realizacja potrwa od 3 do 5 dni. Czy jest to szybszy sposób?
EDYCJA: Dodałem więcej szczegółów na temat mojego kodu.
możliwe duplikat [szybko przeczytaniu bardzo dużych tabel jak dataframes w R] (http://stackoverflow.com/questions/1727772/quickly-reading-very-large-tables-as-dataframes-in-r) – joran
Co próbujesz zrobić? Zbudować pojedynczą macierz ze wszystkimi danymi, albo odczytać i przetwarzać każdą matrycę osobno? –
Ma to znaczenie przy ładowaniu wielu plików naraz: http://stackoverflow.com/questions/3764292/ – Ben