Tipos y clases de variables

Dos preguntas R:

  1. ¿Cuál es la diferencia entre el tipo (devuelto por typeof ) y la clase (devuelta por class ) de una variable? ¿La diferencia es similar a la de, por ejemplo, el lenguaje C ++?
  2. ¿Cuáles son los tipos y clases de variables posibles?

En R, cada “objeto” tiene un mode y 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 como una list pero se envuelven en objetos data.frame . Este último permite el uso de funciones miembro así como funciones de sobrecarga, como print con un comportamiento personalizado.

typeof ( storage.mode ) generalmente dará la misma información que mode pero 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í :

El tipo de función específica R de 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 publiqué anteriormente también contiene una lista de todos basic types R nativos (vectores, listas, etc.) y todos los compound objects (factores y marcos de datos), así como algunos ejemplos de cómo el mode , el typeof y la class están relacionados para cada tipo.

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

Por otro lado, class significa algo más en R de lo que puedes esperar. Del manual de R Language Definition (que vino con su versión de R):

2.2.4 Clases

R tiene un complejo sistema de clases 1 , principalmente controlado a través del 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 generics” en R.

Los usuarios pueden acceder y manipular este atributo prácticamente sin restricciones. No se verifica que un objeto realmente contenga los componentes que los métodos de clase esperan. Por lo tanto, la alteración del atributo de clase se debe hacer con precaución, y cuando estén disponibles, se deben preferir funciones específicas de creación y coerción.