Dos preguntas R:
- ¿Cuál es la diferencia entre el tipo (devuelto por
typeof
) y la clase (devuelto porclass
) de una variable? ¿Es la diferencia similar a la de, digamos, lenguaje C ++? - ¿Cuáles son los posibles tipos y clases de variables?
Dos preguntas R:
typeof
) y la clase (devuelto por class
) de una variable? ¿Es la diferencia similar a la de, digamos, lenguaje C ++?Respuestas:
En R, todo "objeto" tiene una 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 list
pero están envueltos en data.frame
objetos. Este último permite el uso de funciones miembro, así como funciones de sobrecarga, como print
con un comportamiento personalizado.
typeof
( storage.mode
) normalmente 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í :
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
, typeof
y class
están relacionadas para cada tipo.
oldClass(matrix(1:10, 2,5)) # NULL
type
realmente 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, class
significa 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.