Modo, clase y tipo de objetos R

39

Me preguntaba ¿cuáles son las diferencias entre los modos, clase y tipo de objetos R? El tipo de un objeto R se puede obtener mediante la función typeof (), modo por modo () y clase por clase ().

¿También otras funciones y conceptos similares que me perdí?

¡Gracias y saludos!

Tim
fuente
2
str (variable) es tu mejor amigo.
Brandon Bertelsen
2
Ver también R: Tipos y clases de variables pregunta sobre Stack Overflow.
Leo

Respuestas:

21

El class()se utiliza para definir / identificar qué "tipo" es un objeto desde el punto de vista de la programación orientada a objetos en R. Así que para

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

se utilizará cualquier función genérica que tenga un método "entero".

typeof()da el "tipo" de objeto desde el punto de vista de R, mientras que mode()da el "tipo" de objeto desde el punto de vista de Becker, Chambers y Wilks (1988). Este último puede ser más compatible con otras implementaciones de S de acuerdo con el manual de definición de lenguaje R.

Probablemente me equivoque en el uso typeof()en la mayoría de los casos a menos que fuera para pasar objetos R al código compilado, donde storage.mode()será útil.

Esto se discute útilmente en la definición del lenguaje R como se vincula a arriba.

Restablece a Mónica - G. Simpson
fuente
3
¿Por qué hay tantos puntos de vista? No veo beneficios sino confusión.
smwikipedia
1
@smwikipedia porque R tiene una herencia que incluye S-Plus y S y ese último lenguaje evolucionó con el tiempo. Además, es necesario diferenciar entre los objetos que los usuarios pueden crear y los tipos de objetos base.
Restablece a Monica - G. Simpson
@smwikipedia porque así es como es R. Por la misma razón que tenemos <-y =para asignación variable.
Andre Terra
9

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

'modo' es una clasificación mutuamente excluyente de objetos según su estructura básica. Los modos 'atómicos' son numéricos, complejos, de caracteres y lógicos. Los objetos recursivos tienen modos como 'lista' o 'función' o algunos otros. Un objeto tiene uno y solo un modo.

'clase' es una propiedad asignada a un objeto que determina cómo funcionan las funciones genéricas con él. No es una clasificación mutuamente excluyente. Si un objeto no tiene asignada una clase específica, como un vector numérico simple, su clase suele ser la misma que su modo, por convención.

Cambiar el modo de un objeto a menudo se llama 'coerción'. El modo de un objeto puede cambiar sin cambiar necesariamente la clase.

bearvarina
fuente
1

La principal diferencia entre class y typeof es que el primero puede ser definido por el usuario, pero el tipo no. Por ejemplo, defina una lista

> 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<-" 

Dar un cierto nombre de clase a un objeto definido por el usuario es muy útil para escribir programas. Permite etiquetar objetos definidos por el usuario de manera similar a lo que sucede en los lenguajes de programación orientados a objetos.

Carlos Ramírez Alvarez
fuente
De acuerdo con la Rdocumentación para typeofy class, la afirmación sobre "diferencia principal" es incorrecta. classes un atributo de un objeto que puede asignarse independientemente de su modo de almacenamiento interno, mientras que "typeof determina el tipo (R interno) o el modo de almacenamiento de cualquier objeto". Uno describe una característica lógica mientras que el otro es una característica física de un objeto.
whuber