web-dev-qa-db-fra.com

Quelle est la différence pratique entre data.frame et data.table dans R

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?

42
remarkableearth

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.tables sont aussi data.frames. 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.tables.

58
Ricardo Saporta

Quelques différences dans ma vie quotidienne qui me viennent à l'esprit (sans ordre particulier):

  • ne pas avoir à spécifier le 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)
  • opérations by beaucoup plus rapides et très intuitives
  • ne plus frapper frénétiquement Ctrl-C après avoir tapé df, oubliant la taille de df (ce qui conduit également à ne presque jamais utiliser head)
  • lecture de fichiers plus rapide et meilleure avec fread
  • le package fournit également un certain nombre d'autres fonctions utilitaires, comme %between% ou rbindlist qui améliorent la vie
  • plus rapide tout le reste, car beaucoup de data.frame les opérations copient inutilement le tout
32
eddi

Ils 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.

8
Ellis Valentiner