Чтение больших файлов в R

Я новичок в R, но я знаю, что он подавляется «большими» файлами. Я пытаюсь прочитать файл данных размером 200 МБ. Я пробовал его в формате csv, а также конвертировал в txt с разделителями табуляции, но в обоих случаях я использую свои 4 ГБ ОЗУ до загрузки файла.

Нормально ли, что R использует 4 ГБ или память для загрузки файла размером 200 МБ, или может быть что-то не так с файлом, и это заставляет R продолжать читать кучу небытия в дополнение к данным?


person Oliver    schedule 12.01.2013    source источник
comment
1) 200 МБ - это далеко не большой размер. 2) Какую функцию вы используете для чтения файла (и читали ли вы страницу справки для этой функции)? 3) Какие данные находятся в файле? 4) Вы искали SO (я нашел несколько соответствующих вопросов / ответов, выполнив поиск по [r] large file). 5) Читали ли вы Импорт / экспорт данных R?   -  person Joshua Ulrich    schedule 12.01.2013
comment
И предоставьте нам воспроизводимый фрагмент кода, который показывает вашу проблему. CSV-файлы размером 200 МБ не должны занимать 4 ГБ.   -  person Paul Hiemstra    schedule 12.01.2013
comment
Я пробовал использовать основные способы чтения файла, поскольку это все, что я знаю: read.table (myfile.csv, header = TRUE) или для версии txt я использовал read.table (myfile.txt, sep = \ t, заголовок = ИСТИНА). Есть более 200 столбцов, которые в основном состоят из отдельных букв или маленьких чисел. К сожалению, посередине находится большая группа переменных, которые заполнены редко.   -  person Oliver    schedule 12.01.2013
comment
Может ли длина имен переменных мешать? Некоторые из них комично длинные, я думаю, они думали, что они очень описательные.   -  person Oliver    schedule 12.01.2013
comment
@Oliver Если у вас нет опыта работы с read.table / scan / .. и другими функциями R для чтения / записи данных, я думаю, вам следует сначала потратить время, чтобы протестировать их в небольших файлах, и как только вы поймете основы, попробуйте чтобы прочитать ваш hudge-файл.   -  person agstudy    schedule 12.01.2013


Ответы (1)


От 1_

Less memory will be used if colClasses is specified as one of the six atomic vector classes.

...

Using nrows, even as a mild over-estimate, will help memory usage.

Используйте оба этих аргумента.

Убедитесь, что вы правильно указали numeric для числовых данных. См. Здесь: Указание colClasses в read.csv

И не недооценивайте результаты.

Если вы используете 64-битную версию R, вы можете попробовать 32-битную версию. Он будет использовать меньше памяти для хранения тех же данных.

См. Также: Увеличить ограничение размера памяти в R

person Matthew Lundberg    schedule 12.01.2013
comment
Почему вы упоминаете nrows, а не colClasses? Хранение чисел в виде строк очень неэффективно, а вызов type.convert вызывает ненужное дублирование. А как узнать, что read.table - лучшая функция для использования? OP даже не сказал вам, как выглядят их данные (например, scan может быть лучшим решением, если это всего лишь матрица). - person Joshua Ulrich; 12.01.2013
comment
@Oliver Определите классы столбцов (см. Связанный вопрос) и включите этот аргумент. Если это не помогает, также используйте nrows. Разница между значениями, разделенными табуляцией и запятой, значения не имеет. - person Matthew Lundberg; 12.01.2013
comment
Спасибо, посмотрю на nrows и colClasses. - person Oliver; 12.01.2013