Более быстрый способ чтения нескольких 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
.
См. историю старых ответов.