Более быстрый способ чтения нескольких CSV в один фрейм данных?

Есть ли способ ускорить следующий процесс в R?

theFiles <- list.files(path="./lca_rs75_summary_logs", full.names=TRUE, pattern="*.summarylog")

listOfDataFrames <- NULL
masterDataFrame <- NULL

for (i in 1:length(theFiles)) {
    tempDataFrame <- read.csv(theFiles[i], sep="\t", header=TRUE)
    #Dropping some unnecessary row
    toBeRemoved <- which(tempDataFrame$Name == "")
    tempDataFrame <- tempDataFrame[-toBeRemoved,]
    #Now stack the data frame on the master data frame
    masterDataFrame <- rbind(masterDataFrame, tempDataFrame)
}

В основном, я читаю несколько файлов csv в каталоге. Я хочу объединить все файлы csv в один гигантский фрейм данных, уложив строки. Кажется, что цикл работает дольше, поскольку размер masterDataFrame увеличивается. Я делаю это в кластере linux.

Ответ 1

Обновлен ответ с помощью data.table::fread.

require(data.table)
out = rbindlist(lapply(theFiles, function(file) {
         dt = fread(file)
         # further processing/filtering
      }))

fread() автоматически обнаруживает заголовок, разделитель файлов, классы столбцов, не преобразует строки в коэффициент по умолчанию.. обрабатывает встроенные кавычки, довольно быстро и т.д. Подробнее см. ?fread.


См. историю старых ответов.