Apparemment, dans ma dernière question, j'ai démontré une confusion entre data.frame
et data.table
. Certes, je ne savais pas qu'il y avait une distinction.
J'ai donc lu l'aide pour chacun, mais en termes pratiques et quotidiens, quelle est la différence, quelles sont les implications et à quoi servent chacun qui me guideraient vers leur utilisation appropriée?
Bien qu'il s'agisse d'une question générale, si quelqu'un est nouveau dans R
, cela peut prêter à confusion et la distinction peut être perdue.
Tout data.table
s sont aussi data.frame
s. En gros, vous pouvez considérer data.tables comme data.frames avec des fonctionnalités supplémentaires.
data.frame
fait partie de la base R
.
data.table
est un package qui étend data.frames
. Deux de ses caractéristiques les plus remarquables sont la vitesse et la syntaxe plus propre.
Cependant, ce sucre de syntaxe est différent de la syntaxe R standard pour data.frame tout en étant difficile à distinguer d'un œil non averti. Par conséquent, si vous lisez un extrait de code et qu'aucun autre contexte n'indique que vous travaillez avec data.tables et que vous essayez d'appliquer le code à un data.frame, il peut échouer ou produire des résultats inattendus. (une indication claire que vous travaillez avec d.t, outre l'appel library
/require
est la présence de l'opérateur d'affectation :=
qui est unique à d.t)
Cela étant dit, je pense il est difficile d'apprécier réellement la beauté de data.table
sans rencontrer les défauts de data.frame
. (par exemple, voir les 3 premières puces de la réponse de @ eddi). En d'autres termes, je suggérerais vivement d'apprendre à travailler avec et à manipuler data.frames
d'abord puis passez à data.table
s.
Quelques différences dans ma vie quotidienne qui me viennent à l'esprit (sans ordre particulier):
data.table
nom encore et encore (conduisant à une syntaxe maladroite et à des erreurs stupides) dans les expressions (d'un autre côté, je manque parfois la TAB-complétion des noms)by
beaucoup plus rapides et très intuitivesdf
, oubliant la taille de df
(ce qui conduit également à ne presque jamais utiliser head
)fread
%between%
ou rbindlist
qui améliorent la viedata.frame
les opérations copient inutilement le toutIls sont similaires. Les trames de données sont des listes de vecteurs de longueur égale tandis que les tableaux de données (data.table
) est un héritage de trames de données. Par conséquent, les tableaux de données sont des blocs de données, mais les blocs de données ne sont pas nécessairement des tableaux de données. Le package et la fonction des tableaux de données ont été écrits pour améliorer la vitesse d'indexation, les jointures ordonnées, l'affectation, le regroupement et la liste des colonnes (etc.).
Voir http://datatable.r-forge.r-project.org/datatable-intro.pdf pour plus d'informations.