38 votos

Modo, Clase y Tipo de objetos R

Me preguntaba cuáles son las diferencias entre Modo, Clase y Tipo de los objetos en R? El tipo de un objeto en R se puede obtener con la función typeof(), el modo con mode() y la clase con class().

Además, ¿hay alguna otra función o concepto similar que haya pasado por alto?

¡Gracias y saludos!

2 votos

Str(variable) es tu mejor amigo.

2 votos

Ver también R: Tipos y clases de variables pregunta en Stack Overflow.

20voto

David J. Sokol Puntos 1730

La clase() 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"

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

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 & Wilks (1988). Este último puede ser más compatible con otras implementaciones de S según el manual de Definición del Lenguaje R.

Probablemente tienda a utilizar typeof() en la mayoría de los casos a menos que sea para pasar objetos de R a código compilado, donde storage.mode() será útil.

Esto se discute útilmente en la Definición del Lenguaje R como se menciona arriba.

3 votos

¿Por qué hay tantos puntos de vista? No veo beneficios, solo confusión.

1 votos

@smwikipedia porque R tiene un legado que incluye S-Plus y S y ese último lenguaje evolucionó con el tiempo. Además, hay una necesidad de diferenciar entre los objetos que los usuarios pueden crear y los tipos de objetos base.

0 votos

@smwikipedia porque así es como funciona R. Por la misma razón tenemos <- y = para asignar variables.

9voto

brennanag Puntos 40

De: https://www.mail-archive.com/r-help@r-project.org/msg17169.html :

'mode' es una clasificación mutuamente excluyente de objetos según su estructura básica. Los modos 'atómicos' son numérico, complejo, carácter y lógico. Los objetos recursivos tienen modos como 'lista' o 'función' u algunos otros. Un objeto tiene un único modo.

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

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

1voto

La principal diferencia entre class y typeof es que la primera puede ser definida por el usuario, pero el tipo no. Por ejemplo, define 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 nombre de clase específico 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.

0 votos

Según la documentación de R para typeof y class, la afirmación sobre la "diferencia principal" es incorrecta. class es un atributo de un objeto que se puede asignar independientemente de su modo de almacenamiento interno, mientras que "typeof determina el tipo o modo de almacenamiento (interno de R) de cualquier objeto." Uno describe una característica lógica mientras que la otra es una característica física de un objeto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X