Curso de Programacion en R-studio
Estructura de Datos Matrices
true
Contents
Matrices 1
Creación de Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
Filas, Columnas y Dimensión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Nombres de las Filas, Columnas y Dimensiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Operaciones con Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Selección de Elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Agregar Filas y Columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Eliminar Filas y Columnas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Resumen 7
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
1
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
#[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
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]
2
## 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
#[1] 4
ncol(automoviles)
## [1] 3
#[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
#[1] 12
Nombres de las Filas, Columnas y Dimensiones
Al igual que los vectores poseen atributos como 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
3
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
diag(A)
## [1] 1 5 9
#[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
Si le sumamos a la matris M el valor de 2, el proceso se realiza en cada componente de la matriz.
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
4
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
5
Además, con la función solve() podemos resolver sistemas de ecuaciones lineales. Por ejemplo, si disponemos
del siguiente sistema de ecuaciones:
7x + 9y = 5
Ax = b
3x − 5y = 7
Lo colocamos en su forma matricial:
Podemos resolver el sistema de ecuaciones en R, del siguiente modo:
7 9 x 5
=
3 −5 y 7
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
Es muy facil acceder a los elementos de una matriz considerando que se opera con dos índices, 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 “i” es el elemento fila y “j” 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
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:
6
# 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].
7
• 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].