Подтвердить что ты не робот

Когда стоит использовать `data.table`? Когда я могу ожидать наибольшего прироста производительности?

Я только что потратил некоторое время на изучение data.table в R и задавался вопросом об условиях, при которых я могу ожидать наибольшего прироста производительности. Возможно, простой ответ заключается в том, что у меня есть большой файл данных и часто работают с подмножествами этого data.frame. Когда я просто загружаю файлы данных и оцениваю модели, я не могу ожидать многого, но многие операции [ имеют значение. Это правда и единственный ответ или что еще я должен учитывать? Когда это начинает иметь значение? 10x5, 1,000x5, 1,000,000x5?

Изменить: некоторые из комментариев предполагают, что data.table часто быстрее и, что не менее важно, почти никогда не замедляется. Поэтому было бы также полезно знать, когда не использовать data.table.

4b9b3361

Ответ 1

Есть, по крайней мере, несколько случаев, когда data.table светит:

  • Обновление существующего набора данных с новыми результатами. Поскольку data.table является ссылкой на ссылку, это значительно быстрее.
  • Стратегии типа Split-apply-comb с большим количеством групп для разделения (как указывает ответ @PaulHiemstra).
  • Выполнение почти что-либо для действительно большого набора данных.

Вот некоторые ориентиры: Бенчмаркинг data.frame(база), data.frame(пакет данных) и data.table

Ответ 2

Один экземпляр, где data.table является быстродействующим, заключается в работе типа split-apply-comb, который сделал plyr известным. Скажем, у вас есть data.frame со следующими данными:

precipitation     time   station_id
23.3              1      A01
24.1              2      A01
26.1              1      A02
etc etc

Если вам нужно усреднить идентификатор станции, вы можете использовать множество R-функций, например. ave, ddply или data.table. Если число уникальных элементов в station_id растет, data.table масштабируется очень хорошо, пока, например, ddply получить очень медленно. Более подробную информацию, включая пример, можно найти в этой записи в моем блоге. Этот тест свидетельствует о возможности увеличения скорости более чем в 150 раз. Эта разница, вероятно, может быть намного больше...