Sección 3 Objetos en R

Los resultados de un cierto procedimiento pueden ser almacenados en diferentes clases de objetos. R tiene cinco clases básicas de objetos, números (numeric), números complejos (complex), cadenas de caracteres (character), factores (factor) y valores lógicos (logical). Éstos pueden juntarse para formar vectores (vector), matrices (matrix), hojas de datos (data.frame) o listas (list). Otras clases de objetos pueden ser funciones, modelos, objetos espaciales, entre otros. En esta sección trabajaremos con algunos de ellos. Para conocer la clase de un objeto se utiliza la función class.

3.1 Vectores

Es el objeto más simple de R. Es importante tener en cuenta que los vectores sólo contienen elementos de la misma clase básica. La función c() puede utilizarse para crear vectores concatenando sus argumentos.

x <- c(2, 4, 6)               #numérico (enteros) 
a <- c(-1, 5, 9, 10.5)        #numérico (continuo)
d <- c(4+2i, 2+5i)            #números complejos
y <- c("a", "b", "c")         #caracteres
z <- c(TRUE, TRUE, FALSE, T)  #lógico

Si quisiéramos concatenar x y a podríamos utilizar como argumentos de la
función c(), a los objetos que quisiéramos agrupar.

x <- c(2, 4, 6)
a <- c(-1, 5, 9, 10.5)
x_a <- c(x, a)
x_a
## [1]  2.0  4.0  6.0 -1.0  5.0  9.0 10.5
length(x_a)
## [1] 7

Si quiséramos comprobar que el objeto x_a tiene una longitud de 7 elementos (igual a la suma de elementos de los objetos x y a), podemos utilizar la función length().

length(x) + length(a)
## [1] 7
length(x_a)
## [1] 7

Note que en el ejemplo anterior T y F es la forma corta de especificar TRUE y FALSE. Es recomendable utilizar la forma explícita de TRUE y FALSE antes que la forma corta, dado que T y F son símbolos que pueden redefinirse, por lo que no se debería asumir que siempre se van a evaluar como operadores lógicos.

3.1.1 Secuencias

x <- c(1, 2, 3, 4, 5)
x <- 1:10
y <- -5:3

Para generar secuencias de números enteros consecutivos se puede utilizar :, pero si se desea generar otros tipos de secuencias, por ejemplo la secuencia 4,6,8,…,20, se debe utilizar la función seq. Los argumentos de esta función permiten generar secuencias con saltos o longitud definida por el usuario.

seq(from = 4, to = 20, by = 2)
## [1]  4  6  8 10 12 14 16 18 20

Los argumentos de la función seq, permiten generar secuencia, desde (from y, hasta (to) los valores especificados. Se pueden especificar el incremento de cada valor (by), o puede definirse el largo de la secuencia deseada (length.out).

3.1.2 Vectores con valores repetidos

Cuando se desea generar un vector con valores repetidos se puede utilizar la función rep. Esta función replica los valores que se espicifican en el primer argumento, tantas veces o hasta alcanzar la longitud total que se especifique.

rep(1, 5)
## [1] 1 1 1 1 1
x <- 1:3
rep(x, 2)
## [1] 1 2 3 1 2 3
rep(x, c(2,4,1)) #En este caso repetirá el 1 dos vecesm el 2 cuatro veces y el 3 una vez.
## [1] 1 1 2 2 2 2 3
rep(x, length = 8)
## [1] 1 2 3 1 2 3 1 2

3.1.3 Vectores de factores

Los vectores que se generan pueden convertirse en factores, para ello se utiliza la función as.factor.

x_f <- as.factor(x)

Tambien pueden generarse vectores que contiene factores utilizando gl. A esta función se le debe especificar el número de niveles del factor y el número de repeticiones. Se le puede especificar el largo del vector y las etiquetas (labels) de los factores.

gl(3, 5)
##  [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
## Levels: 1 2 3
gl(3, 5, length = 30)
##  [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3
## Levels: 1 2 3
gl(3, 5, labels = c("grupo A", "grupo B", "grupo C"))
##  [1] grupo A grupo A grupo A grupo A grupo A grupo B grupo B grupo B grupo B
## [10] grupo B grupo C grupo C grupo C grupo C grupo C
## Levels: grupo A grupo B grupo C

3.1.4 Seleccion de elementos de un vector

Los corchetes ([ ]) se utilizan para indicar posición de un objeto. Se utilizan del lado derecho del objeto. Dado que los vectores son elementos de una dimensión, si se desea seleccionar el primer elemento del objeto x se debe indicar x[1].

x <- c(3,52,-8,2,1,7,11,-3,0,6,23,17)
x[1]
## [1] 3
x[3]
## [1] -8
x[c(1, 3)]
## [1]  3 -8

Si se desea sustituir un elemento del vector se puede utilizar el signo de asignación. Por ejemplo, si se desea sustituir el tercer elemento de x por 88:

x[3] <-  88
x
##  [1]  3 52 88  2  1  7 11 -3  0  6 23 17

Si se quiere obtener un vector sin algunos elementos, se debe anteponer el signo - al valor del índice.

x[-3]
##  [1]  3 52  2  1  7 11 -3  0  6 23 17

3.2 Matrices

Las matrices son vectores con atributo de dimensión (2 dimensiones: filas y columnas). A diferencia de los data.frames, todas las columnas de las matrices son de una misma clase. Para generar matrices se puede utilizar la función matrix.

x <- 1:20
matrix(x, nrow = 5, ncol = 4)
##      [,1] [,2] [,3] [,4]
## [1,]    1    6   11   16
## [2,]    2    7   12   17
## [3,]    3    8   13   18
## [4,]    4    9   14   19
## [5,]    5   10   15   20

Las matrices pueden ser creadas uniendo filas o columnas mediante las funciones cbind() y rbind().

x <- 1:3
y <- 10:12
cbind(x, y)
##      x  y
## [1,] 1 10
## [2,] 2 11
## [3,] 3 12
rbind(x, y)
##   [,1] [,2] [,3]
## x    1    2    3
## y   10   11   12

3.2.1 Operaciones con matrices:

  • A %*% B : producto de matrices
  • t(A) : traspuesta de la matriz A
  • solve(A) : inversa de la matriz A
  • solve(A,b) : solución del sistema de ecuaciones Ax=b.
  • svd(A) : descomposición en valores singulares
  • qr(A) : descomposición QR
  • eigen(A) : valores y vectores propios
  • diag(b) : matriz diagonal. (b es un vector)
  • diag(A) : matriz diagonal. (A es una matriz)
  • A %o% B == outer(A,B) : producto exterior de dos vectores o matrices

3.3 Listas

Una lista es la forma generalizada de un vector que puede contener elementos de diferentes clases (número, vector, matriz, lista, etc.). Para crear lista se puede utilizar la función list(). Dada su flexibilidad son contenedores generales de datos. Muchas funciones devuelven un conjunto de resultados de distinta longitud y distinto tipo en forma de lista.

n <-  c(2, 4, 6)
s <-  c("aa", "bb", "cc", "dd", "ee")
b <-  c(TRUE, FALSE, TRUE, FALSE, FALSE)
x <-  list(n, s, b)
x
## [[1]]
## [1] 2 4 6
## 
## [[2]]
## [1] "aa" "bb" "cc" "dd" "ee"
## 
## [[3]]
## [1]  TRUE FALSE  TRUE FALSE FALSE

3.4 Hojas de datos (Data frames)

Es el objeto más común en R para almacenar datos. Sus columnas pueden ser de diferentes clases por ejemplo variables continuas y categóricas. Este tipo de objetos puede generarse mediante la función data.frame().

data.frame convierte los vectores de caracteres en factores automáticamente.

x1 <- 1:10
x2 <- 24:33
x3 <- gl(2, 5, labels = c("si","no"))
x4 <- letters[1:10]
data.frame(A = x1, B = x2, C = x3, D = x4)
##     A  B  C D
## 1   1 24 si a
## 2   2 25 si b
## 3   3 26 si c
## 4   4 27 si d
## 5   5 28 si e
## 6   6 29 no f
## 7   7 30 no g
## 8   8 31 no h
## 9   9 32 no i
## 10 10 33 no j

3.5 Algunas funciones básicas predefinidas

  • summay()
  • mean()
  • var()
  • sd()
  • cor()
  • sum()
  • min()
  • max()
  • seq()
  • which()
    • which.min()
    • which.min()
  • length()
  • table()
  • is.na()
  • is.null()
  • complete.cases()
  • as.character()
  • as.numeric()
  • paste()
  • gsub()
  • unique()
  • lm()
  • dim()
  • nrow()
  • ncol()
  • colnames()
  • rownames()
  • edit()
  • cbind()
  • rbind()
  • order()
  • install.packages()
  • library()

Ejercitación

  1. Vectores

    Genere un vector b el cual contenga los valores de x y a ¿Cuantos elementos tiene el vector b?

  2. Secuencias

    Genere la secuencia 8,7,6,5,4

    seq(4,20,2) ¿Este comando da eror? ¿Por qué?

    Genere usando comandos para secuencias el vector de componentes: 1, 2, 3, 4, 5, 6, 73, 72, 71, 70, 69, 68, 3, 6, 9, 12, 15, 18.

  3. Repetir valores

    Genere un vector de componentes “azul”, “azul”,“azul”, “azul”, “amarillo”, “amarillo”, “verde”, “verde”,“verde”, llamado col. ¿Es un vector de factores?

  4. Matrices

    Calcule la inversa y los autovalores y autovectores de A = matrix(c(1,3,3,9,5,9,3,5,6), nrow = 3)