Este capítulo atenderá a la declaración y manejo de matrices en R. Y al igual que en el capítulo vectores, nos preguntamos ¿qué es una matriz? Pues bien, una matriz A es un arreglo rectangular de números reales de dimensiones m x n.
Una respuesta más simple sería: Una variable indexada con dos índices, en otras palabras, conjuntos de vectores que se acceden a ellos mediante un par de índices.
Declaración de Matrices.
La forma más simple de crear una matriz en R, es mediante la función matrix(), la cual posee cinco argumentos.
El primero es opcional y debe ser un vector que corresponderá a los elementos de la matriz: x=vector, el segundo y tercero de los argumentos son para declarar el número de filas y columnas de la matriz: nrow=número-de-filas y ncol=número-de-columnas, el cuarto argumento sirve para definir cómo se completará los elementos de la matriz, o por columnas, o si no se define nada, se completa la matriz por filas: byrow=True-False y por último, dimnames=nombre-a-columnas-y-filas.
A continuación, se muestra cómo crear una matriz llamada M de dimensión 3x2:
> M <- matrix(nrow = 2, ncol = 3)
> M
.........[,1]..[,2]..[,3]
[1,]....NA..NA..NA
[2,]....NA..NA..NA
Ya que no se ha definido ningún elemento, R nos lo informa con NA, para crear una matriz con elementos, por ejemplo, mediante columnas: (1, 2, 3, 4, 5, 6):
> M <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3)
> M
.........[,1]..[,2]..[,3]
[1,]....1.......3......5
[2,]....2......4......6
En caso que queramos crearlo por filas:
> M <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3, byrow=TRUE)
> M
.........[,1]..[,2]..[,3]
[1,]....1.......2......3
[2,]....4......5......6
Y por último, si queremos añadirles nombres a los índices de columnas: Naranjas, Plátanos y Melón, y en las filas: Supermercado y Tienda, se muestra a continuación:
> M <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3, byrow=TRUE,
+ dimnames=list(c("Supermercado", "Tienda"), c("Naranjas", "Plátanos", "Melón")))
> M
.........................Naranjas.Plátanos.Melón
Supermercado........1..............2..........3
Tienda....................4..............5..........6
Para más información sobre la función matriz(), se recomienda la consulta de la ayuda.
Acceso a los Elementos de una Matriz.
Para acceder a los elementos de una matriz, se procederá de forma similar a cómo lo hacíamos con los elementos de un vector, con una diferencia, la matriz posee, generalmente, dos índices correspondientes a las filas y columnas respectivamente.
Por ejemplo, para acceder a la matriz anteriormente declarada, M, al elemento [2,3]:
> M[2,3]
[1] 6
Si queremos acceder a una fila completa, por ejemplo en la matriz M, acceder a todos los elementos de la primera fila:
> M[1,]
Naranjas.Plátanos.Melón
......1............2.............3
Y si queremos acceder a todos los elementos de una columna, por ejemplo, en la matriz M acceder a los elementos de la columna 3:
> M[,3]
Supermercado.Tienda
...........3................6
Éstas son las formas más fáciles de acceder a los elementos de una matriz.
Operaciones Básicas con Matrices.
En la siguiente tabla, se muestran las operaciones más comunes para operar entre matrices:
Operaciones Básicas con Matrices. | ||
Operación | Definición | Ejemplo |
+ | Suma de matrices. | > A+M .....[,1]..[,2] [1,]..6....10 [2,]..8....12 |
%*% | Realiza el producto matricial. | > A%*%M .....[,1]..[,2] [1,].19...43 [2,].22...50 |
crossprod() | Realiza el producto cruzado de matrices. | > crossprod(A,M) .....[,1]..[,2] [1,].17...39 [2,].23...53 |
- | Resta de matrices. | > A-M .....[,1]..[,2] [1,]..4....4 [2,]..4....4 |
* | Producto elemento por elemento de dos matrices siempre y cuando sean de dimensiones correctas. | > A*M .....[,1]..[,2] [1,]..5....21 [2,].12...32 |
Para los ejemplos de la anterior tabla, sean utilizado las siguientes matrices:
> M<-matrix(c(1,2,3,4),nrow=2,ncol=2)
> A<-matrix(c(5,6,7,8),nrow=2,ncol=2)
Funciones Útiles para el manejo de Matrices.
A continuación, se mostrarán las más funciones más comunes, ya definidas en R, para trabajar con matrices:
Funciones Básicas para Matrices. | ||
Función | Definición | Ejemplo |
dim(matriz) | Devuelve la dimensión de la matriz. | > dim(A) [1] 2.2 |
t(matriz) | Devuelve la transpuesta de la matriz. | > t(A) .....[,1]..[,2] [1,].5.....6 [2,].7.....8 |
det(matriz) | Devuelve el determinante de la matriz. | > det(A) [1] -2 |
solve(matriz) | Devuelve la inversa de la matriz. | > solve(A) .....[,1]..[,2] [1,].-4...3.5 [2,]..3..-2.5 |
eigen(matriz) | Devuelve los autovalores y los autovectores de la matriz. | > eigen(A) $values [1] 13.1520673.-0.1520673 $vectors ......[,1]....................[,2] [1,] -0.6514625..-0.8053759 [2,] -0.7586809...0.5927644 |
diag(matriz) | Devuelve la diagonal de la matriz en forma de vector. | > diag(A) [1] 5..8 |
colSums(matriz) | Devuelve la suma de las columnas de la matriz. | colSums(A) [1] 11..15 |
rowSums(matriz) | Devuelve la suma de las filas de la matriz. | rowSums(A) [1] 12..14 |
Para los ejemplos de la anterior tabla, sea utilizado la siguiente matriz:
> A<-matrix(c(5,6,7,8),nrow=2,ncol=2)
Para más información sobre las funciones expuestas en la anterior tabla, se recomienda que se use la ayuda integrada en R.
Como se puede observar, la creación y manipulación de matrices en R es bastante fácil y para estudios estadísticos será una gran herramienta a tener en cuenta.
6 comentarios:
hola, me queda claro como realizar operaciones con matrices, pero ¿como podria multiplicar dos matrices 500 veces de manera aleatoria con repeticion?
Buenas:
Una de las maneras de crear una matriz aleatoria es así:
> matrix(rnorm(20), 4)
Dónde los datos son aleatorios de la curva Normal (en este ejemplo he escogido 20 datos) y repartidos en 4 columnas.
Tu problema, pues creas dos matrices y las multiplica 500 veces mediante un bucle for por ejemplo.
Un saludo y gracias por tu comentario.
Hola! Que bueno me ayudaste a arrancar.. tengo una base de datos bien grande y ando queriendo dejar el excell para manejarla. tendras algun apuntecito PDF basico a mano? mi mail es alhuebg@gmail.com
muchas gracias Aqueronte!
Hola, alguién sabe como crear varias matrices en R en un ciclo (for o while)...
la idea es crear matrices de nombre
X1
X2
.
.
.
Xn
en donde X1,X2,...,Xn son matrices
de antemano muchas gracias, les dejo mi correo, sebastianreyesb@gmail.com
Hola!
Tengo una duda ya que soy nuevo en R. Cuando creamos en Matlab una matriz de la que no tenemos certeza de su dimensión, podemos declara m=[] y siemplemente vamos "agregando" datos (e.g., m(1,2)=5;). Leyendo información de R no encuentro una función similar. Existe alguna función que te permita crear una matriz en la que a priori desconozcas sus dims ?
Buenas:
Lo que puedes hacer es ir almacenando esos valores en un vector y cuando sepas la dimensión de la matriz, crearla.
Un saludo.
Publicar un comentario