Пакет предложений для чтения большого файла .txt (7,7 ГБ) в R - PullRequest
3 голосов
/ 12 марта 2020

У меня возникают проблемы при попытке прочитать большой файл .txt (7,7 ГБ) в R. Файл содержит 817426 столбцов и более 1000 строк. Все переменные имеют числовое значение c. До сих пор я пробовал несколько разных пакетов (data.table; vroom; bigreadr) с командами fread; Врум; big_fread2.

С помощью fread я смог прочитать первые 145 строк в моем сеансе R, но он вылетает, когда я пытаюсь прочитать 146 строк. Для других команд система просто прерывается через некоторое время, и появляется сообщение об ошибке:

R сессия прервана. R обнаружил фатальную ошибку. Сеанс был прекращен

Это коды, которые я использовал до сих пор:

system.time(dfUga <- fread("CpG_sexageres.txt", nrows=145, header = TRUE, sep = "\t", colClasses="numeric"))
system.time(dfUga <- vroom("CpG_sexageres.txt", col_names = TRUE))
system.time(dfUga <- big_fread2("CpG_sexageres.txt"))

Любые предложения приветствуются. Приветствия

1 Ответ

5 голосов
/ 12 марта 2020

R в основном работает полностью в памяти. Это означает, что если размер фрейма данных, полученного в результате чтения CSV, превысит доступную оперативную память, попытка его чтения составит sh R. Одним из вариантов здесь будет использование инструмента, более подходящего для размещения таких больших данных. набор. База данных является одним из вариантов. Вы можете загрузить свои данные в базу данных, а затем получить к ним доступ из R с помощью соответствующего пакета.

Если вы решите, что вам действительно нужно работать со всем набором, то большинство реляционных баз данных, вероятно, можно будет работать здесь. Например, MySQL является опцией, и существует пакет RMySQL, который может взаимодействовать с базой данных MySQL.

Однако , вам может даже не понадобиться использовать весь набор данных одновременно. Если вы планируете выполнить некоторые статистические вычисления для своего набора данных, и существует равномерное или случайное распределение данных относительно номера строки в файле CSV, вы можете просто прочитать подмножество этих данных в R. Вот один из способов для выборки каждой N-й строки из входного файла. Используя в качестве примера файл объемом 7,7 ГБ, если бы вы читали только каждую 10-ю строку, у вас получился бы фрейм данных 770 МБ (примерно), который должен находиться в пределах памяти вашей установки R.

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