Matriz y array
El hecho de que ambos sean conocidos como vectores multidimensionales ya dice mucho del peso del concepto vector en R. Ambas (matriz y array) comparte con el vector ser colecciones de datos homogéneos, esto es: de un mismo tipo, pero si diferencia en que su número de dimensiones no se limita a una.
Una matriz es un vector bidimensional (longitud y altura, podemos decir), por lo que se puede representar como una tabla de doble entrada, en la que la longitud son las columnas y la altura las filas.
Un array es un vector de más de dos dimensiones (n.dimensional, si se prefiere), por lo que se puede representar como un cubo , un hipercubo u otras formas más complejas. Es precisamente esta complejidad la que hace que el array sea una colección de datos poco usada en R, motivo por el cual en esta entrada me limitaré a hablar de la matriz como colección o estructura de datos.
Para crear una matriz empleamos la función matrix(), la cual acepta dos argumentos (nrow y ncol) (1) y los valores de ambos debe ser igual al número de elementos de la matriz, en caso contrario, obtendremos una matriz con datos truncados o con datos añadidos, siendo ésta una limitación a tener en cuenta (2).
Si queremos crear una matriz con unos contenidos específicos (esto es: no derivada de una serie de números (matrix(1:10)), deberemos generar una expresión de cierta complejidad (matrix(c("P1","P2","P3","P4","P5","P6"), nrow = 3, ncol = 2)) que además respete la condición antes indicada en cuanto a la relación entre el número de elementos y al producto de filas * columnas.
También podemos crear una matriz a partir de cierto número de vectores mediante las funciones cbind() y rbind(). cbind() trata cada vector como una columna y rbind() como una fila.
Pongamos un ejemplo de conversión de vectores en matrices. Supongamos tres vectores, el primero con el identificador del curso, el segundo con el número de alumnos del grupo y el tercero con el porcentaje de aprobados en Matemáticas:
- curso<-c("P1","P2","P3","P4","P5","P6")
- alumnos <- c(24,22,20,19,21,25)
- mataprob <- c(67,72,84,53,82,79)
Podemos construir una matriz vector-fila (cole <- rbind(curso,alumnos,mataprob)) o vector-columna (cole <- cbind(curso,alumnos,mataprob)) con los resultados que se muestran en la imagen siguiente (3):
Otras funciones que pueden sernos de utilidad para trabajar con matrices son la función class(), que nos permite saber si una colección de datos es considera una matriz (o un array) por R, la función dim(), que nos devuelve el número de filas y columnas de la matriz (o del array) y la función t(), que nos permite trasponer filas-columnas.
NOTAS
(1) Podemos crear una matriz sin estos argumentos, lo que deriva en crear una matriz unidimensional, esto es, el equivalente a un vector.
(2) Si este producto no es igual al número de elementos o bien se omiten los elementos que sobran o se reciclan los que faltan hasta completar las posiciones definidas en filas-columnas.
(3) En este caso, los tres vectores tienen la misma longitud, por lo que la estructura matricial se ajusta al contenido, pero si tuvieran diferente longitud, tendríamos las mismas limitaciones que vimos antes. Una solución para evitar elementos faltantes o duplicados es introduciendo valores NA en el vector que los precise hasta completar el número de elementos necesarios para que se ajusten las longitudes de los vectores constituyentes de la matriz, o los datos de ésta.
No hay comentarios:
Publicar un comentario
Comenta esta entrada