3.16 Matrices

Una variable indexada (array) es una colección de datos, por ejemplo numéricos, indexada por varios índices. R permite crear y manipular variables indexadas en general y en particular, matrices.

Las matrices se crean utilizando la función matrix (). En su forma más simple, el uso de la función implica especificar un vector que contiene los elementos de la matriz y el número de filas o columnas de la matriz.

x <- matrix(c(2, 3, 5, 7, 11, 13), nrow = 3) 
x
##      [,1] [,2]
## [1,]    2    7
## [2,]    3   11
## [3,]    5   13
 x <- matrix(c(2, 3, 5, 7, 11, 13), ncol = 2) 
 x
##      [,1] [,2]
## [1,]    2    7
## [2,]    3   11
## [3,]    5   13

Las array pueden verse como matrices “multidimensionales”. Se crean usando la función array (). En su forma más simple, el uso de la función implica especificar un vector que contiene los elementos de la matriz y el número de elementos para cada dimensión usando el argumento dim.

x <- 1:20
ax <- array(x, dim = c(5, 2, 2)) > ax
,,1

Tenga en cuenta que, de forma predeterminada, las matrices se forman insertando los distintos elementos por columna. Obviamente, la matriz se puede adquirir desde un archivo externo. Por ejemplo, suponga que el archivo matdata tiene el siguiente contenido.

1,24,32,36,33
2,16,44,34,33
3,20,31,43,32
4,23,35,37,35
5,27,40,40,31
6,19,43,32,37

El contenido del archivo se puede adquirir y asignar a una matriz de 6 × 5 con los comandos:

x2 <- scan("matdata", sep = ",")

mx <- matrix(x2, ncol = 5, byrow = TRUE)
mx

El argumento byrow = TRUE especifica que el contenido debe adquirirse por fila y no por columna.

La función dim () devuelve el tamaño (número de filas y número de columnas) de la matriz indicada como argumento.

{r dim (mx)

En cuanto a los vectores, los elementos de una matriz se pueden extraer utilizando paréntesis []. Para extraer un elemento de una matriz, debe especificar su posición de fila y columna.

x[2, 1]
## [1] 3
x[2, 2]
## [1] 11

Para extraer una fila o columna completa, simplemente especifique su posición:

x[, 1]
## [1] 2 3 5
x[3, ]
## [1]  5 13

Se pueden extraer subconjuntos de filas y / o columnas.

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

Las matrices pueden verse como matrices “multidimensionales”. Se crean usando la función array (). En su forma más simple, el uso de la función implica especificar un vector que contiene los elementos de la matriz y el número de elementos para cada dimensión usando el argumento dim.

{r x <- 1:20 ax <- array(x, dim = c(5, 2, 2)) ax ,,1

Podemos crear una matriz compuesta por números usualmente, usando la funcion ‘matrix()’:

mi_matriz <- matrix(data = 1:10, # qué se incuye en la matriz
                    ncol = 5, # número de columnas
                    nrow = 20, # número de filas
                    byrow = TRUE) # incluir el input

Podemos indexar elementos de matrices en múltiples modos:

mi_matriz[1,] # las filas van seguidas de una coma. Primero filas y luego columnas[row,colum]
mi_matriz[,5] # columnas detrás de la coma
mi_matriz[3,3]

Se pueden crear nuevas variables a partir de secciones de matrices:

val <- mi_matriz[3,3]
val <- mi_matriz[,3]

Hay algunas funciones útiles que podemos aprender para conocer más a fondo la matriz:

sum(mi_matriz) # La suma de los elementos de la matris
nrow(mi_matriz) # El número de filas de la matriz
ncol(mi_matriz) # El número de columnas de la matriz
```

R tiene un conjunto de tipos de datos suficientemente diversificado para ser adecuado en la mayor cantidad de análisis. Los tipos que encontraremos con mayor frecuencia son lógicos (con los modos VERDADERO y FALSO), de caracteres (cadenas de caracteres) y numéricos. Las funciones con el prefijo is.type.of.data verifican a qué tipo de datos pertenece el objeto especificado como argumento.


```r
x1 <- 1:3
is.logical(x1)
```

```
## [1] FALSE
```

Para combinar objetos que no comparten la misma estructura, como cadenas de caracteres y vectores, es necesario utilizar una lista. Este es un tipo más general de estructura de vectores y matrices.


```r
lista1 <- list(x1, x2)  
lista1

[[1]]
[1] 1 2 3
[[2]]
[1] "A" "B" "C"

```

Una de las posibles formas de acceder a la información de una lista es mediante corchetes dobles.

```r
lista1[[1]]
[1] 1 2 3
```

```r
lista1[[2]]
[1] "A" "B" "C"
```

Es posible, en la fase de creación de una lista, asignar un nombre a cada uno de sus componentes. Si los componentes de una lista tienen un nombre, se puede acceder a ellos, y posteriormente a los elementos que los componen, mediante el símbolo $.

```r
lista2 <- list(comp1 = x1, comp2 = x2)
lista2

$comp1
[1] 1 2 3

$comp2
[1] "A" "B" "C"

lista2$comp2
[1] "A" "B" "C"

lista2$comp2[3]

[1] "C"

```

Devuelve el valor NULL si no se han asignado. Además de NULL, TRUE y FALSE, R tiene otros valores "reservados".

Probablemente, el más relevante para nuestros propósitos es NA, que indica un valor faltante. No es raro encontrar valores NaN (número indefinido) e Inf (infinito).

## Subsetting

La forma más básica de subsetting es extraer un grupo de elementos de un vector, por ejemplo:

```r
mi_vector <- 1:10
mi_vector[3:5] # extract the 3rd to 5th elements
new_vector <- mi_vector[3:5] # assign them to a new vector
mi_vector[c(1,2,9)] # extract the 1st, 2nd, and 9th elements in a vector:

También podemos usar la c() para quitar algunos subsets (subsecciones) de la matriz:

mi_matriz[c(1:3,5),c(2,4)]

Nótese la diferencia entre [[]] y [] en las listas:

nueva_lista <- mi_lista[1] # Devuelve la lista
nuevo_valor <-  mi_lista[[1]] # Devuelve un objeto que estaba en la lista

Usar [] para el subset de una lista:

nueva_lista <- mi_lista[1:2]