У меня довольно большой набор данных (4,7 млн строк и 42 переменных). Когда я пытаюсь сохранить это на общем диске, над которым я работаю, saveRDS
Windows выдает сообщение об ошибке, но меньшие наборы данных сохраняются без проблем. Чтобы ответить на этот вопрос, я решил нормализовать свои данные и сохранить соответствующие данные измерений и фактов.
После извлечения столбцов, определяющих одно измерение данных, моим следующим шагом было удалить дублирование в измерении с помощью unique
, но выполнить
dim_data <- unique(dim_data)
заставил мою сессию довольно долго зависать перед возвратом с сообщением об ошибке
Ошибка: память исчерпана (предел достигнут?)
Ошибка при переносе: невозможно выделить вектор размером 127,6 Мб
(на моей машине 16 ГБ ОЗУ).
Я боролся с этим некоторое время, прежде чем пытаться
dim_data <- as.data.table(dim_data)
dim_data <- unique(dim_data)
В этот момент вторая строка выполняется мгновенно и успешно.
Я счастлив, что у меня есть решение, и я понимаю, что другая версия unique
называется в зависимости от класса ее аргумента , но что объясняет неспособность unique
к даже завершить свои вычисления применительно к кадрам данных, которые превышают определенный размер? Является ли базовая реализация крайне неэффективной, и если да, то известно ли это и запланировано ли исправление (я не смог найти ничего о производительности unique
)? И наоборот, меньше ли это о реализации функции data.table и больше о том, как объекты data.table хранятся более разумно за кулисами?