web-dev-qa-db-fra.com

Types et classes de variables

Deux questions R:

  1. Quelle est la différence entre le type (renvoyé par typeof) et la classe (renvoyée par class) d'une variable? La différence est-elle similaire à celle du langage C++, par exemple?
  2. Quels sont les types et classes de variables possibles?
83
Leo

Dans R, chaque "objet" a un mode et un class. Le premier représente la façon dont un objet est stocké en mémoire (numérique, caractère, liste et fonction) tandis que le dernier représente son type abstrait. Par exemple:

d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list

Comme vous pouvez le voir, les trames de données sont stockées en mémoire sous la forme list mais elles sont enveloppées dans data.frame objets. Ce dernier permet l'utilisation des fonctions membres ainsi que des fonctions de surcharge telles que print avec un comportement personnalisé.

typeof (storage.mode) donnera généralement les mêmes informations que mode mais pas toujours. Exemple concret:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

Le raisonnement derrière cela peut être trouvé ici :

La fonction spécifique R typeof renvoie le type d'un objet R

Le mode Function donne des informations sur le mode d'un objet au sens de Becker, Chambers & Wilks (1988), et est plus compatible avec d'autres implémentations du Langue S

Le lien que j'ai posté ci-dessus contient également une liste de tous les R basic types (vecteurs, listes, etc.) et tous les compound objects (facteurs et data.frames) ainsi que quelques exemples de relations entre mode, typeof et class pour chaque type.

95
diliop

type fait vraiment référence aux différentes structures de données disponibles dans R. Cette discussion dans le manuel de définition du langage R peut vous aider à démarrer sur les objets et les types.

D'un autre côté, class signifie autre chose dans R que ce à quoi vous pouvez vous attendre. Dans le manuel Définition du langage R (fourni avec votre version de R):

2.2.4 Classes

R a un système de classe élaboré1, principalement contrôlé via l'attribut class. Cet attribut est un vecteur de caractères contenant la liste des classes dont un objet hérite. Cela constitue la base de la fonctionnalité "méthodes génériques" dans R.

Cet attribut est accessible et manipulable virtuellement sans restriction par les utilisateurs. Il n'y a aucune vérification qu'un objet contient réellement les composants attendus par les méthodes de classe. Ainsi, la modification de l'attribut class doit être effectuée avec prudence, et lorsqu'elles sont disponibles, des fonctions de création et de coercition spécifiques doivent être préférées.

6