Mode, classe et type d'objets R

39

Je me demandais quelles sont les différences entre les objets Mode, Classe et Type de R? Le type d'un objet R peut être obtenu par la fonction typeof (), mode par mode () et classe par classe ().

Également d'autres fonctions et concepts similaires que j'ai manqués?

Merci et salutations!

Tim
la source
2
str (variable) est votre meilleur ami.
Brandon Bertelsen
2
Voir aussi R: Question sur les types et les classes de variables sur le dépassement de capacité.
Leo

Réponses:

21

Le class()est utilisé pour définir / identifier le "type" d'un objet du point de vue de la programmation orientée objet dans R. So for

> x <- 1:3
> class(x)
[1] "integer"

toute fonction générique ayant une méthode "entier" sera utilisée.

typeof()donne le "type" d'objet du point de vue de R, tandis que mode()donne le "type" d'objet du point de vue de Becker, Chambers & Wilks (1988). Ce dernier peut être plus compatible avec d'autres implémentations de S conformément au manuel de définition du langage R.

J'aurais probablement commis une erreur en utilisant typeof()dans la plupart des cas à moins que ce soit pour passer des objets R au code compilé, où storage.mode()cela sera utile.

Ceci est utilement discuté dans la définition du langage R comme lié à ci-dessus.

Rétablir Monica - G. Simpson
la source
3
Pourquoi y a-t-il tant de points de vue? Je ne vois aucun avantage mais confusion.
smwikipedia
1
@smwikipedia parce que R a un héritage qui inclut S-Plus et S et que cette dernière langue a évolué au fil du temps. En outre, il est nécessaire de différencier les objets que les utilisateurs peuvent créer et les types d'objet de base.
Réintégrer Monica - G. Simpson
@smwikipedia parce que c'est comme ça que R est. Pour la même raison que nous avons <-et =pour l'affectation de variable.
Andre Terra
9

De: https://www.mail-archive.com/[email protected]/msg17169.html :

Le «mode» est une classification mutuellement exclusive d'objets en fonction de leur structure de base. Les modes "atomiques" sont numérique, complexe, caractère et logique. Les objets récursifs ont des modes tels que «liste» ou «fonction» ou quelques autres. Un objet a un et un seul mode.

'classe' est une propriété affectée à un objet qui détermine comment les fonctions génériques fonctionnent avec lui. Ce n'est pas une classification mutuellement exclusive. Si aucun objet n'a été attribué à un objet, tel qu'un simple vecteur numérique, sa classe est généralement identique à son mode, par convention.

Changer le mode d'un objet s'appelle souvent «coercition». Le mode d'un objet peut changer sans nécessairement changer de classe.

Bearvarine
la source
1

La principale différence entre class et typeof est que le premier peut être défini par l'utilisateur, mais pas le type. Par exemple, définir une liste

> x<-list("a",c(1,2))

> # x is a list
> class(x)
[1] "list"
> # class can be user defined
> class(x)<-"newclass"
> class(x)
[1] "newclass"

> typeof(x)
[1] "list"
# you cannot assign a different type using typeof()
> typeof(x)<-"newclass"
Error in typeof(x) <- "newclass" : could not find function "typeof<-" 

Donner un certain nom de classe à un objet défini par l'utilisateur est très utile pour écrire des programmes. Cela permet de baliser les objets définis par l'utilisateur de la même manière que dans les langages de programmation orientés objet.

Carlos Ramírez Alvarez
la source
Selon la Rdocumentation de typeofet class, l'affirmation concernant la "différence principale" est incorrecte. classest un attribut d'un objet qui peut être affecté quel que soit son mode de stockage interne, alors que "typeof détermine le type (interne) ou le mode de stockage de tout objet". L'une décrit une caractéristique logique tandis que l'autre est une caractéristique physique d'un objet.
whuber