Capítulo 4 Objetos
R es un programa ‘orientado a objetos’: variables, datos, funciones, resultados, etc., se guardan en la memoria RAM en forma de objetos con un nombre específico sin usar archivos temporales.
Cada clase de objeto tiene diferentes atributos que determinan la forma en que trabajan dentro de R, es decir, define cuáles funciones se le pueden aplicar.
Estos objetos se pueden modificar o manipular con operadores y funciones –que a su vez son objetos–.
Bajo este término se esconde la simplicidad y flexibilidad de R.
Algunas de las clases más comunes de objetos son: ‘integer’, ‘numeric’, ‘character’, ‘logical’ (son vectores), ‘matrix’, ‘data.frame’, ‘list’ y ‘function’.
4.1 Tipo de objetos
La cantidad de clases de objetos es muy grande y crece permanentemente a medida que se crean nuevos paquetes.
Objeto | Dimensión o largo | Tipo de elementos | Ejemplo |
---|---|---|---|
Vector | length() | similares | |
Matriz | dim() | similares | |
Marco de datos | dim() | diferentes | |
Lista | length() | diferentes | |
4.2 Vectores
Un vector es una colección de uno o más objetos del mismo tipo (números o caracteres pero no ambos). Un escalar también es un vector en R.
4.2.1 c()
Crea un vector
Según sus elementos será la clase del vector: character, numeric, integer, logical
Cada elemento va separado por una coma
Con la función class() compruebo que tipo de objeto es
4.3 Vector
## [1] 15 16 17 19
## [1] "numeric"
## [1] 7.5 8.0 8.5 9.5
## [1] "numeric"
4.4 Vector
Para el caso de “palabras” (“strings”), la clase “character” es la que utiliza R para manejar este tipo de objetos. Al igual que en la mayoría de los lenguajes de programación, R utiliza las comillas dobles (") o simples (’) para delimitar un string.
## [1] "15" "16" "17" "19"
## [1] "character"
## [1] "lunes" "martes" "miércoles" "viernes"
## [1] "character"
4.5 Ejemplo vectores
Comparemos algunas características de R con otros software estadísticos como Stata y SPSS. Esta tabla la tomé de Princeton University, la traduje y le agregué el año de creación.
Características | R | SPSS | Stata |
---|---|---|---|
Año | 1993 | 1968 | 1985 |
Curva aprendizaje | Muy empinada | Plana | Empinada |
Interfaz | Programación | Point and click | Programación/Point and click |
Manipulación de datos | Avanzada | Moderada | Avanzada |
Análisis de datos | Potente/Versátil | Potente | Potente |
Gráficos | Excelentes | Muy buenos | Muy buenos |
Software libre | 1 | 0 | 0 |
Costo | Gratuito | Muy costoso | Accesible |
anio <- c(1993, 1968, 1985)
software_libre <- c(T, F, F)
costo <- c("gratuito", "costoso", "accesible")
## [1] 3
## [1] "numeric"
4.6 Coerción
Como mencionamos anteriormente, estos elementos deben ser todos de la misma clase. Si se combinan objetos de diferente clase, R reasigna los elementos a la clase apropiada. Si contiene números y texto el vector será de clase character
.
La coerción es necesaria para el funcionamiento correcto de R. Al mismo tiempo puede ser una fuente de errores si no se tiene en cuenta.
Un texto sin comillas en R es un objeto (siempre que cumpla las reglas de un nombre de objeto).
4.7 Vectorización
R vectoriza las operaciones de manera que si sumo un número a un vector numérico, a cada elemento del vector le sumará ese número. Esta propiedad es una ventaja ya que permite evitar loops en muchas de situaciones y de esta manera se obtiene un código más ‘limpio’ y eficiente.
## [1] -1 0 1 2 3 4
El operador : sirve para generar vectores numéricos
## [1] 4 5 6 7 8 9
## [1] -3 0 3 6 9 12
4.8 Funciones descriptivas de un vector numérico
length(x): devuelve la cantidad de elementos de x
sort(x, decreasing = F): ordena los elementos de manera creciente
sum(x): devuelve la suma de los elementos de x
max(x): máximo
min(x): mínimo
mean(x): promedio aritmético de x
median(x): mediana de x
sd(x): desvío estándar de x
var(x): varianza de x
summary(x): resumen descriptivo de x (mínimo, máximo, media, mediana, cuartiles)
4.9 Data frame
- Puede verse como un conjunto de vectores de diferente tipo pero de igual largo.
# vector numeric
anio <- c(1993, 1968, 1985)
# vector lógico
software_libre <- c(T, F, F)
# vector character
costo <- c("gratuito", "costoso", "accesible")
# data frame
df <- data.frame(anio, software_libre, costo)
class(df)
## [1] "data.frame"
anio | software_libre | costo |
---|---|---|
1993 | TRUE | gratuito |
1968 | FALSE | costoso |
1985 | FALSE | accesible |
- En un conjunto de datos, cada variable/columna es un vector.
## [1] "numeric"
## [1] "logical"
## [1] "factor"
- En general el data frame vendrá dado en un archivo.
4.10 Explorar los datos
4.11 Guardar objeto en formato RData
El primer elemento debe ser un objeto. Podrían ser más de uno.
Es necesario nombrar el argumento ‘file’ definiendo ruta y nombre de archivo.
Si en file solo se define el nombre del archivo, se guarda en el directorio de trabajo actual: getwd()
El nombre del objeto y el archivo pueden coincidir, pero no necesariamente.
Un archivo Rdata es más liviano que cualquier otro formato externo.