Deux questions R:
typeof
) et la classe (renvoyée par class
) d'une variable? La différence est-elle similaire à celle du langage C++, par exemple?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.
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.