У меня есть большой фрейм данных, занимающий около 900 МБ памяти. Затем я попытался изменить это так:Недостаточно памяти при изменении большого R-данных.frame
dataframe[[17]][37544]=0
Кажется, что делает R с использованием более чем 3G барана и R жалуется: (. Я на 32-битной машине) «Ошибка не может выделить вектор размером 3,0 Мб»,
Я нашел этот способ лучше:
dataframe[37544, 17]=0
но след R по-прежнему в два раза, и команда занимает некоторое время, чтобы бежать.
На фоне C/C++ я действительно смущен этим поведением. Я подумал, что что-то вроде dataframe[37544, 17]=0
должно быть завершено в мигающем режиме, не затрачивая никакой дополнительной памяти (только одна ячейка должна быть изменена). Что делает R для тех команд, которые я написал? Каков правильный способ изменения некоторых элементов в кадре данных, а затем без дублирования памяти?
Большое вам спасибо за помощь!
Тао
(Base) R классно не впечатляет при обработке больших структур данных. Вы захотите изучить некоторые комбинации пакетов ** ff **, ** bigmemory ** и ** data.table **. – joran
Это неправда - data.frames классно неэффективны, но в (базовом) R есть очень эффективные структуры, которые вы должны использовать, если вам нужна эффективность. –
@SimonUrbanek Да, я сформулировал это плохо. Я просто имел в виду именно то, что вы сказали, что фреймы данных, как правило, неэффективны, и что упомянутые мной пакеты часто могут быть полезны для людей, занимающихся большими данными. – joran