Какова практическая разница между data.frame и data.table в R
По-видимому, в моем последнем вопросе я продемонстрировал путаницу между data.frame
и data.table
. По общему признанию, я не понимал, что существует различие.
Итак, я читаю о помощи для каждого, но в практических, повседневных условиях, в чем разница, какие последствия и какие из них используются для этого, помогут мне в их правильном использовании?
Ответы
Ответ 1
Хотя это широкий вопрос, если кто-то не знаком с R
, это может сбивать с толку, и различие может быть потеряно.
Все data.table
также data.frame
s. Говоря кратко, вы можете думать о data.tables как data.frames с дополнительными функциями.
data.frame
является частью базы R
.
data.table
- это пакет, который расширяет data.frames
. Две из его наиболее примечательных особенностей - синтаксис скорости и чистого.
Однако этот синтаксический сахар отличается от стандартного синтаксиса R для data.frame, будучи трудным для неподготовленного глаза, чтобы отличить сразу. Поэтому, если вы читаете фрагмент кода и нет другого контекста, указывающего на то, что вы работаете с data.tables и пытаетесь применить код к data.frame, он может выйти из строя или вызвать неожиданные результаты. (явная подделка, что вы работаете с d.t, кроме вызова library
/require
есть наличие оператора присваивания :=
, который уникален для d.t)
При всем этом, я думаю, что трудно оценить красоту data.table
, не испытывая недостатков data.frame
. (например, см. первые 3 балла точки ответа @eddi). Другими словами, я бы очень хотел научиться работать с data.frames
и манипулировать им сначала, а затем перейти к data.table
s.
Ответ 2
Несколько различий в моей повседневной жизни, которые приходят на ум (в определенном порядке):
- не нужно указывать имя
data.table
снова и снова (приводящее к неуклюжим синтаксису и глупым ошибкам) в выражениях (на оборотной стороне иногда я пропускаю завершение имен TAB)
- гораздо быстрее и очень интуитивно понятные операции
by
- не отчаянно ударяя Ctrl-C после ввода
df
, забыв, насколько велика df
(также почти никогда не использующая head
)
- быстрее и лучше читать файлы с помощью
fread
- пакет также предоставляет ряд других функций полезности, таких как
%between%
или rbindlist
, которые улучшают жизнь
- быстрее все остальное, так как много операций
data.frame
копирует всю вещь без необходимости
Ответ 3
Они похожи. Кадры данных представляют собой списки векторов равной длины, тогда как таблицы данных (data.table
) являются наследованием кадров данных. Поэтому таблицы данных представляют собой кадры данных, но кадры данных необязательно представляют собой таблицы данных. Пакет и функция таблиц данных были написаны для повышения скорости индексирования, упорядоченных объединений, присвоения, группирования и перечисления столбцов (и т.д.).
Подробнее см. http://datatable.r-forge.r-project.org/datatable-intro.pdf.