Types et classes de variables

84

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, par exemple, du langage C ++?
  2. Quels sont les types et classes de variables possibles?
Leo
la source
Cet article connexe pourrait également fournir des informations utiles: stackoverflow.com/questions/8855589/…
Dominic Comtois

Réponses:

96

Dans R, chaque "objet" a un modeet 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 second 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 listmais elles sont enveloppées dans des data.frameobjets. Ce dernier permet l'utilisation des fonctions membres ainsi que la surcharge des fonctions comme printavec un comportement personnalisé.

typeof( storage.mode) donnera généralement les mêmes informations que modemais 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 Fonction 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 langage S

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

diliop
la source
1
"Dans R, chaque" objet "a un mode et une classe" tant qu'ils sont visualisés du point de vue de la structure de classe S4 OOP. Dans S3, les objets peuvent ne pas avoir de noms de classe attribués:oldClass(matrix(1:10, 2,5)) # NULL
Erdogan CEVHER
6

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

D'autre part, classsignifie autre chose dans R que ce à quoi vous pouvez vous attendre. À partir du manuel de définition du langage R (fourni avec votre version de R):

2.2.4 Classes

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

Cet attribut peut être consulté et manipulé 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 de classe doit être effectuée avec précaution et, lorsqu'elles sont disponibles, les fonctions de création et de coercition spécifiques doivent être préférées.

Dirk Eddelbuettel
la source