Matrices

Una matriz es una extensión de un vector a dos dimensiones, lo que implica que dispone del atributo dimension. El atributo dimensión es en si mismo un vector de longitud 2 (numero de filas, numero de columnas). Una matriz se utiliza para representar datos de un único tipo en dos dimensiones.

Creación de Matrices

Para crear matrices utilizaremos la función matrix(), la sintaxis es la siguiente

> str(matrix)
function (data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)

A continuación mostramos la descripción de los argumentos:

  • data es el vector que contiene los elementos que formaran parte de la matriz.
  • nrow es el número de filas.
  • ncol es el número de columnas.
  • byrow es un valor lógico. Si es TRUE el vector que pasamos será ordenado por filas.
  • dimnames nombres asignado a filas y columnas.

Seguidamente se muestra un ejemplo de creación de una matriz:

> matriz <- matrix(1:12, nrow = 4)
> matriz
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12

A partir de un vector, si le añadimos el atributo dimensión podemos obtener una matriz:

> m <- 1:12
> m
 [1]  1  2  3  4  5  6  7  8  9 10 11 12
> dim(m) <- c(4, 3)
> m
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    2    6   10
[3,]    3    7   11
[4,]    4    8   12

Cuando creamos una matriz, los valores que pasamos son ordenados por columnas. Pero también es posible llenar la matriz por filas especificando el argumento byrow = TRUE:

> matriz <- matrix(1:12, nrow = 4, byrow = TRUE)
> matriz
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
[4,]   10   11   12

En el siguiente ejemplo hacemos uso del argumento dimnames para dar nombre a las filas y columnas:

> automoviles <- matrix(
+                 1:12,
+                 nrow = 4,
+                 byrow = TRUE,
+                 dimnames = list(
+                   c("Blanco", "Rojo", "Negro", "Gris"),
+                   c("Toyota", "Audi", "Nissan")
+                 )
+ )
> automoviles
       Toyota Audi Nissan
Blanco      1    2      3
Rojo        4    5      6
Negro       7    8      9
Gris       10   11     12

Mediante las funciones cbind() y rbind() es posible crear matrices por columnas o por filas a partir de dos vectores de la misma longitud:

> v1 <- c(1, 2, 3)
> v2 <- c(4, 5, 6)
> m1 <- cbind(v1, v2)
> m1
     v1 v2
[1,]  1  4
[2,]  2  5
[3,]  3  6
> v1 <- c(1, 2, 3)
> v2 <- c(4, 5, 6)
> m1 <- rbind(v1, v2)
> m1
   [,1] [,2] [,3]
v1    1    2    3
v2    4    5    6

Filas, Columnas y Dimensión

La función dim() devuelve un vector de integers con la dimensión del objeto:

> dim(automoviles)
[1] 4 3

Además con las funciones nrow() y ncol() podemos conocer el número de filas y columnas, respectivamente:

> nrow(automoviles)
[1] 4
> ncol(automoviles)
[1] 3

La función length() que hemos visto con anterioridad en los vectores, también funciona en matrices. Cuando trabajamos con matrices; no obstante, devuelve el producto de cada una de las dimensiones:

> length(automoviles)
[1] 12

Nombres de las Filas, Columnas y Dimensiones

Del mismo modo que los vectores poseen el atributo names para sus elementos, las matrices disponen de rownames y colnames para las filas y columnas.

> colores <- rownames(automoviles)
> colores
[1] "Blanco" "Rojo"   "Negro"  "Gris"
> marcas <- colnames(automoviles)
> marcas
[1] "Toyota" "Audi"   "Nissan"

Por medio de la función dimnames() obtendremos una lista que contiene dos vectores con los atributos rownames y colnames:

> dimnames(automoviles)
[[1]]
[1] "Blanco" "Rojo"   "Negro"  "Gris"  

[[2]]
[1] "Toyota" "Audi"   "Nissan"

Operaciones con Matrices

La función diag() extrae la diagonal principal de una matriz:

> A <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 3, ncol = 3, byrow = TRUE)
> A
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9
> diag(A)
[1] 1 5 9

Además, diag() nos permite crear matrices diagonales:

> diag(c(1, 2, 3, 4))
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    2    0    0
[3,]    0    0    3    0
[4,]    0    0    0    4

La matriz identidad es muy fácil de crear en R. Por ejemplo, la matriz identidad de dimensión 4 es:

> Id4 = diag(1, nrow = 4)
> Id4
     [,1] [,2] [,3] [,4]
[1,]    1    0    0    0
[2,]    0    1    0    0
[3,]    0    0    1    0
[4,]    0    0    0    1

Hay que tener cierto cuidado con los operadores aritméticos básicos (+, -, *). Si se suman una matriz y una constante, el efecto es que dicha constante se suma a todos los elementos de la matriz. Lo mismo ocurre con la diferencia, la multiplicación y la división:

> M = matrix(nrow=2,c(1,2,3, 4),byrow = FALSE)
> M
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> M + 2
     [,1] [,2]
[1,]    3    5
[2,]    4    6

Asimismo, si a una matriz se le suma un vector cuya longitud sea igual al número de filas de la matriz, se obtiene como resultado una nueva matriz cuyas columnas son la suma de las columnas de la matriz original más dicho vector.

> v = c(3,4)
> M + v
     [,1] [,2]
[1,]    4    6
[2,]    6    8

La suma o resta de matrices de la misma dimensión se realiza con los operadores + y -; el producto de matrices (siempre que sean compatibles) se realiza con el operador %*%:

> M + M
     [,1] [,2]
[1,]    2    6
[2,]    4    8
> M - M
     [,1] [,2]
[1,]    0    0
[2,]    0    0
> M%*%M
     [,1] [,2]
[1,]    7   15
[2,]   10   22

Una fuente de posibles errores en el cálculo matricial, cuando se utilizan matrices de la misma dimensión, es utilizar los operadores * y / ya que multiplican (o dividen) las matrices término a término:

> M * M
     [,1] [,2]
[1,]    1    9
[2,]    4   16
> M / M
     [,1] [,2]
[1,]    1    1
[2,]    1    1

La traspuesta de una matriz se calcula simplemente con la función t():

> M
     [,1] [,2]
[1,]    1    3
[2,]    2    4
> t(M)
     [,1] [,2]
[1,]    1    2
[2,]    3    4

El determinante de una matriz cuadrada se calcula mediante la función det():

> det(M)
[1] -2

La función solve() permite obtener la inversa de una matriz cuando sólo se le pasa un argumento:

> solve(M)
     [,1] [,2]
[1,]   -2  1.5
[2,]    1 -0.5

Además, con la función solve()podemos resolver sistemas de ecuaciones lineales. Por ejemplo, si disponemos del siguiente sistema de ecuaciones:

Ax=b{3x+2y=5xy=0 Ax=b\begin{cases} 3x\quad +\quad 2y\quad =\quad 5 \\ x\quad -\quad y\quad =\quad 0 \end{cases}

que en forma matricial puede expresarse como

(3211)(xy)=(50) \begin{pmatrix} 3 & 2 \\ 1 & -1 \end{pmatrix}\begin{pmatrix} x \\ y \end{pmatrix}=\begin{pmatrix} 5 \\ 0 \end{pmatrix}

Podemos resolver el sistema de ecuaciones en R, del siguiente modo:

> A <- matrix(c(3, 2, 1, -1), ncol = 2, byrow = TRUE)
> b <- c(5, 0)
> solve(A, b)
[1] 1 1

Selección de Elementos

Los elementos de una matriz están indexados con dos índices lo cual hace que resulte fácil acceder a los elementos y trabajar con ellos si lo que nos interesa es sólo una parte de la información contenida en una matriz y no la matriz entera, esto se logra con el operador de indexación [i, j] donde ii es el elemento fila y jj es el elemento columna.

Siguiendo con el ejemplo anterior, si quisiéramos seleccionar el número de automóviles blancos correspondiente a la marca Audi podríamos hacerlo de dos maneras:

  • Escribiendo el nombre de la matriz y entre corchetes los nombres de la fila y columnas entre comillas:
> automoviles["Blanco", "Audi"]
[1] 2
  • Alternativamente, podemos utilizar la notación de índices:
> automoviles[1, 2]
[1] 2

También podemos seleccionar columnas y filas enteras, de manera que si queremos seleccionar todos los automóviles blancos lo haríamos del siguiente modo:

> automoviles[1,]
Toyota   Audi Nissan 
     1      2      3
> # otra forma de hacerlo es
> automoviles["Blanco",]
Toyota   Audi Nissan 
     1      2      3

Agregar Filas y Columnas

Podemos emplear las funciones `cbind()` y `rbind()` para agregar filas y columnas a una matriz que hemos creado con anterioridad:

> # Añadimos una nueva fila a la matriz
> verde <- c(8, 5, 7)
> automoviles <- rbind(automoviles, verde)
> automoviles
       Toyota Audi Nissan
Blanco      1    2      3
Rojo        4    5      6
Negro       7    8      9
Gris       10   11     12
verde       8    5      7
> # Añadimos una nueva columna
> ford <- c(2, 7, 3, 5, 9)
> automoviles <- cbind(automoviles, ford)
> automoviles
       Toyota Audi Nissan ford
Blanco      1    2      3    2
Rojo        4    5      6    7
Negro       7    8      9    3
Gris       10   11     12    5
verde       8    5      7    9

Eliminar Filas y Columnas

Para eliminar filas utilizaremos la notación [-i,], de forma similar para eliminar columnas utilizaremos la notación [, -j]. A modo de ejemplo, vamos a eliminar la fila y columna que hemos añadido en el apartado anterior:

> #Eliminando la fila verde
> automoviles[-5, ]
       Toyota Audi Nissan ford
Blanco      1    2      3    2
Rojo        4    5      6    7
Negro       7    8      9    3
Gris       10   11     12    5
> # Eliminando columna ford
> automoviles[, -4]
       Toyota Audi Nissan
Blanco      1    2      3
Rojo        4    5      6
Negro       7    8      9
Gris       10   11     12
verde       8    5      7

Resumen

  • La función dim() devuelve un vector de integers con la dimensión del objeto.
  • Además con las funciones nrow() y ncol() podemos conocer el número de filas y columnas.
  • Por medio de la función dimnames() obtendremos una lista que contiene dos vectores con los atributos rownames y colnames.
  • Podemos seleccionar elementos de un vector usando la notación [i,j].
  • Con la ayuda de las funciones cbind() y rbind() podemos agregar filas y columnas.
  • Para eliminar filas utilizaremos la notación [-i,].
  • De forma similar para eliminar columnas utilizaremos la notación [, -j].

results matching ""

    No results matching ""