Маючи лише 4 Гб оперативної пам’яті (працює під управлінням Windows 10, тож зробіть це приблизно 2 або більше реально 1 ГБ), мені довелося бути дуже обережним з розподілом.
Я використовую data.table майже виключно.
Функція 'fread' дозволяє підмножувати інформацію за іменами полів при імпорті; імпортуйте лише поля, які фактично потрібні для початку. Якщо ви використовуєте базове R read, скасуйте помилкові стовпці відразу після імпорту.
Як підказує 42- , коли це можливо, я буду підмножити в стовпцях одразу після імпорту інформації.
Я часто rm () об'єкти з навколишнього середовища, як тільки вони більше не потрібні, наприклад, у наступному рядку після їх використання для підмножини чогось іншого, і викликаю gc ().
'fread' і 'fwrite' з data.table може бути дуже швидким порівняно з базовим R читанням і записом .
Як kpierce8 підказує , я майже завжди переписую все з навколишнього середовища і повертаю його назад, навіть маючи тисячі / сотні тисяч крихітних файлів. Це не тільки підтримує «чисте» середовище та забезпечує низьке розподілення пам’яті, але, можливо, через сильну відсутність оперативної пам’яті, R має схильність до часто збоїв на моєму комп’ютері; дуже часто. Якщо резервна копія інформації на самому накопичувачі, коли код проходить через різні етапи, означає, що мені не потрібно починати з самого початку, якщо вона виходить з ладу.
Станом на 2017 рік, я думаю, що найшвидші SSD працюють через кілька ГБ в секунду через порт M2. У мене дійсно базовий накопичувач Kingston V300 (550 МБ / с) на 50 Гб, який я використовую як свій основний диск (на ньому є Windows та R). Я зберігаю всю основну інформацію на дешевому WD-диску на 500 ГБ. Коли я починаю працювати над ними, я переміщую набори даних на SSD. Це, у поєднанні з 'fread'ing' та 'fwrite' все, вийшло чудово. Я намагався використовувати "ff", але віддаю перевагу першому. 4K швидкості читання / запису можуть створювати проблеми з цим, хоча; резервне копіювання чверті мільйона 1 К файлів (250 МБ) з SSD на блюдо може зайняти години. Наскільки мені відомо, ще не існує жодного пакету R, який би міг автоматично оптимізувати процес «з’єднання»; наприклад, подивіться, скільки оперативної пам’яті має користувач, протестуйте швидкість читання / запису оперативної пам’яті / всіх підключених накопичувачів, а потім запропонуйте оптимальний протокол «chunkification». Це може призвести до значних покращень робочого процесу / оптимізації ресурсів; наприклад, розділіть його на ... MB для оперативної пам'яті -> розділіть її на ... MB для SSD -> розділіть її на ... MB на блюді -> розділіть її на ... MB на стрічці. Він міг заздалегідь відібрати набір даних, щоб надати йому більш реалістичну точку вимірювання.
Багато проблем, над якими я працював, стосуються формування комбінованих та перестановочних пар, трійки тощо, що лише робить обмежену оперативну пам'ять більшою мірою обмеженням, оскільки вони часто принаймні експоненціально розширяться в певний момент. Це змусило мене зосередити велику увагу на якості, а не на кількості інформації, що надходить у них для початку, а не на спроби їх очищення після цього, а також на послідовність операцій з підготовки інформації для початку (починаючи з найпростіша операція і підвищення складності); наприклад, підмножина, потім злиття / об'єднання, а потім формування комбінацій / перестановок тощо.
Здається, є деякі переваги використання базового R для читання і запису в деяких випадках. Наприклад, виявлення помилок у "fread" настільки добре, що може бути важко намагатися отримати дійсно безладну інформацію в R, щоб почати з її очищення. Base R також здається набагато простішим, якщо ви використовуєте Linux. Base R, здається, працює в Linux, Windows 10 використовує ~ 20 Гб місця на диску, тоді як для Ubuntu потрібно лише кілька ГБ, оперативна пам'ять, необхідна для Ubuntu, трохи нижча. Але я помітив велику кількість попереджень та помилок під час встановлення сторонніх пакетів у (L) Ubuntu. Я б не рекомендував відходити занадто далеко від (L) Ubuntu або інших фондових дистрибутивів з Linux, оскільки ви можете втратити стільки загальної сумісності, що робить процес майже безглуздим (я думаю, що «єдність» в Ubuntu відмінено на 2017 рік ).
Сподіваємось, щось із цього може допомогти іншим.