Tipos y clases de variables

84

Dos preguntas R:

  1. ¿Cuál es la diferencia entre el tipo (devuelto por typeof) y la clase (devuelto por class) de una variable? ¿Es la diferencia similar a la de, digamos, lenguaje C ++?
  2. ¿Cuáles son los posibles tipos y clases de variables?
León
fuente
Esta publicación relacionada también puede proporcionar información útil: stackoverflow.com/questions/8855589/…
Dominic Comtois

Respuestas:

96

En R, todo "objeto" tiene una modey una class. El primero representa cómo se almacena un objeto en la memoria (numérico, carácter, lista y función) mientras que el último representa su tipo abstracto. Por ejemplo:

d <- data.frame(V1=c(1,2))
class(d)
# [1] "data.frame"
mode(d)
# [1] "list"
typeof(d)
# list

Como puede ver, los marcos de datos se almacenan en la memoria listpero están envueltos en data.frameobjetos. Este último permite el uso de funciones miembro, así como funciones de sobrecarga, como printcon un comportamiento personalizado.

typeof( storage.mode) normalmente dará la misma información que modepero no siempre. Caso en punto:

typeof(c(1,2))
# [1] "double"
mode(c(1,2))
# [1] "numeric"

El razonamiento detrás de esto se puede encontrar aquí :

La función específica de R typeof devuelve el tipo de un objeto R

El modo de función proporciona información sobre el modo de un objeto en el sentido de Becker, Chambers & Wilks (1988), y es más compatible con otras implementaciones del lenguaje S

El enlace que he publicado anteriormente también contiene una lista de todos los R nativo basic types(vectores, listas etc.) y todos los compound objects(factores y data.frames), así como algunos ejemplos de cómo mode, typeofy classestán relacionadas para cada tipo.

diliop
fuente
1
"En R cada" objeto "tiene un modo y una clase" siempre que se vean desde la perspectiva de la estructura de clases de S4 OOP. En S3, los objetos pueden no tener nombres de clase asignados:oldClass(matrix(1:10, 2,5)) # NULL
Erdogan CEVHER
6

typerealmente se refiere a las diferentes estructuras de datos disponibles en R. Esta discusión en el manual de Definición del lenguaje R puede ayudarlo a comenzar con objetos y tipos.

Por otro lado, classsignifica algo más en R de lo que puede esperar. Del manual de definición de lenguaje R (que viene con su versión de R):

2.2.4 Clases

R tiene un elaborado sistema de clases 1 , controlado principalmente mediante el atributo de clase. Este atributo es un vector de caracteres que contiene la lista de clases de las que hereda un objeto. Esto forma la base de la funcionalidad de "métodos genéricos" en R.

Los usuarios pueden acceder y manipular este atributo virtualmente sin restricción. No se comprueba que un objeto contiene realmente los componentes que esperan los métodos de clase. Por lo tanto, la alteración del atributo de clase debe hacerse con precaución y, cuando estén disponibles, se deben preferir funciones específicas de creación y coerción.

Dirk Eddelbuettel
fuente