R Language
Las clases
Buscar..
Introducción
La clase de un objeto de datos determina qué funciones procesarán sus contenidos. El atributo class
es un vector de caracteres, y los objetos pueden tener cero, una o más clases. Si no hay un atributo de clase, todavía habrá una clase implícita determinada por el mode
un objeto. La clase se puede inspeccionar con la class
función y se puede configurar o modificar mediante la class<-
función. El sistema de clases S3 se estableció temprano en la historia de S. El sistema de clase S4 más complejo se estableció más tarde.
Observaciones
Hay varias funciones para inspeccionar el "tipo" de un objeto. La función más útil es la class
, aunque a veces es necesario examinar el mode
de un objeto. Ya que estamos discutiendo "tipos", uno podría pensar que typeof
sería útil, pero generalmente el resultado del mode
será más útil, porque los objetos sin atributo explícito de "clase" tendrán el despacho de funciones determinado por la "clase implícita" determinada por su modo.
Vectores
La estructura de datos más simple disponible en R es un vector. Puede hacer vectores de valores numéricos, valores lógicos y cadenas de caracteres utilizando la función c()
. Por ejemplo:
c(1, 2, 3)
## [1] 1 2 3
c(TRUE, TRUE, FALSE)
## [1] TRUE TRUE FALSE
c("a", "b", "c")
## [1] "a" "b" "c"
También puedes unirte a vectores usando la función c()
.
x <- c(1, 2, 5)
y <- c(3, 4, 6)
z <- c(x, y)
z
## [1] 1 2 5 3 4 6
Se puede encontrar un tratamiento más elaborado sobre cómo crear vectores en el tema "Creación de vectores"
Inspeccionar clases
A cada objeto en R se le asigna una clase. Puede usar class()
para encontrar la clase del objeto y str()
para ver su estructura, incluidas las clases que contiene. Por ejemplo:
class(iris)
[1] "data.frame"
str(iris)
'data.frame': 150 obs. of 5 variables:
$ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
$ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
$ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
$ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 ...
class(iris$Species)
[1] "factor"
Vemos que el iris tiene la clase data.frame
y el uso de str()
nos permite examinar los datos que contiene. La variable Especies en el marco de datos del iris es de factor de clase, en contraste con las otras variables que son de clase numérica. La función str()
también proporciona la longitud de las variables y muestra el primer par de observaciones, mientras que la función class()
solo proporciona la clase del objeto.
Vectores y listas
Los datos en R se almacenan en vectores. Un vector típico es una secuencia de valores que tienen el mismo modo de almacenamiento (por ejemplo, vectores de caracteres, vectores numéricos). Consulte ?atomic
para obtener detalles sobre las clases implícitas atómicas y sus modos de almacenamiento correspondientes: "logical", "integer", "numeric" (synonym "double"), "complex", "character"
y "raw"
. Muchas clases son simplemente un vector atómico con un atributo de class
en la parte superior:
x <- 1826
class(x) <- "Date"
x
# [1] "1975-01-01"
x <- as.Date("1970-01-01")
class(x)
#[1] "Date"
is(x,"Date")
#[1] TRUE
is(x,"integer")
#[1] FALSE
is(x,"numeric")
#[1] FALSE
mode(x)
#[1] "numeric"
Las listas son un tipo especial de vector donde cada elemento puede ser cualquier cosa, incluso otra lista, de ahí el término R para listas: "vectores recursivos":
mylist <- list( A = c(5,6,7,8), B = letters[1:10], CC = list( 5, "Z") )
Las listas tienen dos usos muy importantes:
Como las funciones solo pueden devolver un solo valor, es común devolver resultados complicados en una lista:
f <- function(x) list(xplus = x + 10, xsq = x^2) f(7) # $xplus # [1] 17 # # $xsq # [1] 49
Las listas también son la clase fundamental subyacente para los marcos de datos . Bajo el capó, un marco de datos es una lista de vectores que tienen la misma longitud:
L <- list(x = 1:2, y = c("A","B")) DF <- data.frame(L) DF # x y # 1 1 A # 2 2 B is.list(DF) # [1] TRUE
La otra clase de vectores recursivos son las expresiones R, que son "lenguaje" - objetos