Проблемы с памятью в кадре памяти.Лучший подход для записи вывода? - PullRequest
0 голосов
/ 16 октября 2018

У меня проблемы с памятью в моей R-скрипте, обрабатывающей огромную папку.Мне нужно выполнить несколько операций для каждого файла, а затем вывести одну строку для каждого файла в мой фрейм данных результатов.

иногда результирующий фрейм данных имеет сотни строк, вставленных вместе в одну строку, как если бы он застрял в одной строке(кажется, что rbind не работает нормально, когда нагрузка огромна) Я думаю, что проблемы возникают при сохранении временного фрейма данных в памяти для добавления результатов, поэтому я использую другой подход: цикл для чтения каждого файла один за другим, процессзатем откройте файл подключения к результатам, напишите строку, закройте подключение и перейдите к следующему файлу.Мне пришло в голову, что избежание большого df в памяти и немедленная запись в файл могут решить мои проблемы.

Я предполагаю, что это очень неэффективно, поэтому мой вопрос: есть ли другой способ эффективного добавления построчно вместо вывода?привязки фрейма данных в памяти и записи на диск в конце?

Я разбираюсь во многих вариантах: раковина, кошка, строка записи ...... я сомневаюсь, какой из них использовать дляизбегайте конфликтов и будьте максимально эффективны при данных условиях

1 Ответ

0 голосов
/ 01 ноября 2018

Я использовал следующий фрагмент:

library(data.table)
filepaths <- list.files(dir)
resultFilename <- "/path/to/resultFile.txt"
for (i in 1:length(filepaths)) {
  content <- fread(filepaths, header = FALSE, sep = ",")
  ### some manipulation for the content 
  results <- content[1]
  fwrite(results, resultFilename, col.names = FALSE, quote = FALSE, append = TRUE)
}
finalData <- fread(resultFilename, header = FALSE, sep = ",")

В моем случае для ~ 2000 файлов и десятков миллионов строк время обработки сократилось более чем на 95% по сравнению с read.csv и постепенно увеличиваетсяданные в data.frame в цикле.Как вы можете видеть в https://csgillespie.github.io/efficientR/importing-data.html разделе 4.3.1 и https://www.r -bloggers.com / fast-csv-writing-for-r / , fread и fwrite оченьдоступные функции ввода / вывода данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...