Когда plyr лучше, чем data.table?

Лучше здесь может означать более быстрый или легкий для чтения/более короткий синтаксис, или это также может означать, что эта команда даже не выполнима в data.table.

Я не использую plyr много и хотел бы знать, есть ли случаи, когда я должен. Поскольку я не использую его много, единственный пример, который я могу придумать, - это rbind.fill, который, насколько мне известно, не имеет аналога data.table, и каждый другой пример, который я видел, t21 > и data.table, последнее было быстрее и легче читать/более компактно.

Ответ 1

Это разные пакеты с разными целями. Один из них не заменяет другого, несмотря на наличие небольшого набора функций, для которого они перекрываются.

Ниже приведен краткий обзор каждого пакета из самих пакетов:

Пакет plyr представляет собой набор чистых и согласованных инструментов, которые реализуют шаблон split-apply-comb в R. Это чрезвычайно распространенная модель анализа данных: вы решаете сложную проблему, разбивая ее на мелкие кусочки, делая что-то для каждой части, а затем снова объединяет результаты.

и

data.table... предлагает быстрое подмножество, быструю группировку, быстрое обновление, быстрое упорядоченное объединение и список столбцов в коротком и гибком синтаксисе для более быстрой разработки. Он вдохновлен синтаксисом A [B] в R, где A - матрица, а B - матрица с двумя столбцами.

Там, где они перекрываются, находится в "быстрой группировке", которую plyr также делает, разбивая data.frames, работая на куски и рекомбинируя их в единый файл данных. data.table имеет множество других функций, которые быстро выполняют операции над структурами данных. plyr имеет функции, которые применяют парадигму split-apply-comb к другим структурам данных, таким как списки и массивы (как входы, так и выходы).

Итак, действительно, это два разных инструмента, которые имеют небольшую область перекрытия, которая адресует один и тот же проблемный домен, но каждый делает гораздо больше, чем это, и если вы хотите/нуждаетесь в дополнительной функциональности, тогда этот пакет должен быть б.