Función de matriz en R: crear, imprimir, agregar columnas y sectores
ā” Resumen inteligente
En R, una matriz es un arreglo bidimensional que contiene un Ćŗnico tipo de dato distribuido en m filas y n columnas, construido con matrix(), extendido con cbind() y rbind(), y al que se accede mediante corchetes.

Función de matriz en R
Una función matricial en R es una matriz bidimensional que tiene m número de filas yn número de columnas. En otras palabras, una matriz en la programación R es una combinación de dos o mÔs vectores con el mismo tipo de datos.
En el fondo, una matriz es simplemente un vector que contiene un atributo dim de longitud dos. Por eso, cada elemento debe compartir un tipo: en el momento en que un valor de carÔcter se une a números, toda la matriz se convierte a carÔcter. R almacena los valores en una única secuencia columna por columna y utiliza dim para decidir dónde termina cada fila, por lo que la elección de tipo de datos Se aplica a todo el objeto a la vez.
Nota: La función matrix() siempre devuelve exactamente dos dimensiones. Para construir una estructura con tres o mÔs dimensiones en R, utilice array() con un vector dim, o asigne dim() directamente. El diagrama a continuación muestra la disposición de filas y columnas que sigue toda matriz.
Cómo crear una matriz en R
Podemos crear una matriz con la función matriz()La firma base de R requiere cinco argumentos, y aquà se muestran los tres que se utilizan con mayor frecuencia:
matrix(data, nrow, ncol, byrow = FALSE)
Argumentos:
- en: La colección de elementos que R organizarÔ en las filas y columnas de la matriz.
- ahora: NĆŗmero de filas.
- ncol: NĆŗmero de columnas.
- byrow: Un indicador lógico. Con el valor predeterminado byrow = FALSE, la matriz se llena columna por columna, de arriba abajo. Con byrow = TRUE, se llena fila por fila, de izquierda a derecha.
- nombres de dimensiones: Una lista opcional de dos elementos que proporciona los nombres de las filas y los nombres de las columnas.
Antes del primer ejemplo, conviene conocer dos detalles de la documentación bÔsica de R. Si solo se especifica uno de los valores (nrow o ncol), R deduce el otro a partir de la longitud de los datos. AdemÔs, si los datos contienen muy pocos elementos para completar la forma solicitada, los valores se reciclan en lugar de descartarse.
Vamos a construir dos matrices de 5Ć2 a partir de la secuencia de nĆŗmeros del 1 al 10, una con byrow = TRUE y otra con byrow = FALSE, para ver la diferencia.
# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow = TRUE matrix_a <-matrix(1:10, byrow = TRUE, nrow = 5) matrix_a
Salida:
Debido a que se usó byrow = TRUE, la consola llena la primera fila con 1 y 2, la segunda fila con 3 y 4, y asà sucesivamente.
Imprime la dimensión de matrix_a con dim().
Ahora, imprimamos la dimensión de la matriz en R con dim(). La sintaxis para imprimir matriz en R usando dim() es:
# Print dimension of the matrix with dim()
dim(matrix_a)
Salida:
## [1] 5 2
La función dim() devuelve primero el nĆŗmero de filas y luego el nĆŗmero de columnas, confirmando asĆ la forma de 5Ć2.
Rellena una matriz por columna con byrow = FALSE
Los mismos diez nĆŗmeros y la misma fila producen una disposición diferente una vez que cambia la dirección de llenado.ping Por defecto, byrow envĆa los valores a la primera columna antes de que comience la segunda.
# Construct a matrix with 5 rows that contain the numbers 1 up to 10 and byrow = FALSE matrix_b <-matrix(1:10, byrow = FALSE, nrow = 5) matrix_b
Salida:
Imprime la dimensión de matrix_b con dim().
Nuevamente, imprima la dimensión de la matriz usando dim(). A continuación se muestra una sintaxis de la dimensión de la matriz de impresión R:
# Print dimension of the matrix with dim()
dim(matrix_b)
Salida:
## [1] 5 2
La forma no cambia en 5Ć2, porque byrow altera el orden de llenado y nunca las dimensiones.
Nota: : Usar el comando matrix_b <-matrix(1:10, byrow = FALSE, ncol = 2) tendrĆ” el mismo efecto que el anterior, ya que R infiere nrow = 5 a partir de los diez valores proporcionados.
TambiĆ©n puedes crear una matriz de 4Ć3 usando ncol. R crearĆ” 3 columnas y las rellenarĆ” de arriba abajo. Consulta un ejemplo.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_c
Salida:
## [,1] [,2] [,3] ## [1,] 1 5 9 ## [2,] 2 6 10 ## [3,] 3 7 11 ## [4,] 4 8 12
Los encabezados de columna [,1] a [,3] y las etiquetas de fila [1,] a [4,] son āāmarcadores de posición predeterminados de R. Desaparecen en cuanto se proporcionan nombres de dimensión reales, como se muestra mĆ”s adelante en este tutorial.
Ejemplo:
dim(matrix_c)
Salida:
## [1] 4 3
Agregue una columna a una matriz con cbind()
Puedes aƱadir columnas a una matriz R con el comando cbind(). cbind() significa unión de columnas y puede concatenar tantas matrices o columnas como se especifique. Por ejemplo, en nuestro ejemplo anterior creamos una matriz de 5Ć2. Concatenamos una tercera columna y verificamos que la dimensión sea de 5Ć3.
Ejemplo:
# concatenate c(1:5) to the matrix_a matrix_a1 <- cbind(matrix_a, c(1:5)) # Check the dimension dim(matrix_a1)
Salida:
## [1] 5 3
Ejemplo:
matrix_a1
Resultado
## [,1] [,2] [,3] ## [1,] 1 2 1 ## [2,] 3 4 2 ## [3,] 5 6 3 ## [4,] 7 8 4 ## [5,] 9 10 5
Ejemplo:
TambiĆ©n podemos vincular mĆ”s de una columna a la vez. El siguiente bloque construye matrix_a2, una matriz de 4Ć3 que contiene los nĆŗmeros del 13 al 24, para que pueda unirse a la matriz de 4Ć3 matrix_c y producir un resultado de 4Ć6 que abarca del 1 al 24.
matrix_a2 <-matrix(13:24, byrow = FALSE, ncol = 3)
Salida:
## [,1] [,2] [,3] ## [1,] 13 17 21 ## [2,] 14 18 22 ## [3,] 15 19 23 ## [4,] 16 20 24
Ejemplo:
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3)
matrix_d <- cbind(matrix_a2, matrix_c)
dim(matrix_d)
Salida:
## [1] 4 6
NOTAPara que cbind() funcione, el número de filas de las matrices en R debe ser igual. Si difieren, R reutiliza la entrada mÔs corta o genera un error, por lo que comprobar primero la función dim() en ambos objetos es la prÔctica mÔs segura.
Mientras que cbind() concatena columnas, rbind() agrega filas. Agreguemos una fila a nuestra matriz matrix_c y verifiquemos que la dimensión sea 5Ć3.
matrix_c <-matrix(1:12, byrow = FALSE, ncol = 3) # Create a vector of 3 columns add_row <- c(1:3) # Append to the matrix matrix_c <- rbind(matrix_c, add_row) # Check the dimension dim(matrix_c)
Salida:
## [1] 5 3
Observe que al vincular un vector con nombre, como add_row, tambiƩn se le da ese nombre a la nueva fila, lo cual es el primer paso hacia las matrices etiquetadas que se tratarƔn mƔs adelante.
Cortar una matriz
Podemos seleccionar uno o varios elementos de una matriz en Programación R mediante corchetes [ ]. Dentro de los corchetes, primero se coloca el selector de fila y luego el selector de columna, separados por una coma. Aquà es donde entra en juego el seccionamiento.
Por ejemplo:
- Matrix_c[1,2] selecciona el elemento en la primera fila y la segunda columna.
- matrix_c[1:3,2:3] da como resultado una matriz de segmentos de R con los datos en las filas 1, 2, 3 y las columnas 2 y 3.
- Matrix_c[,1] selecciona todos los elementos de la primera columna.
- Matrix_c[1,] selecciona todos los elementos de la primera fila.
Dejar un lado de la coma en blanco significa, por lo tanto, que todos los valores de ese lado se omiten. Una consecuencia suele sorprender a los principiantes: cuando se selecciona una sola fila o columna, R descarta la dimensión vacĆa y devuelve un vector simple. Si se aƱade `drop = FALSE`, como en `matrix_c[1, , drop = FALSE]`, el resultado se mantiene como una matriz.
Aquà estÔ el resultado que obtienes para los códigos anteriores.
Nombrar las filas y columnas de una matriz en R.
Las etiquetas predeterminadas como [,1] y [3,] dificultan la lectura de la salida cuando una matriz tiene un significado real. El argumento dimnames y las funciones de reemplazo rownames() y colnames() adjuntan etiquetas de texto que luego se transmiten con la matriz a través de cbind(), t() y cada operación de segmentación.
# Name the rows and columns while the matrix is built sales <- matrix(1:6, nrow = 2, ncol = 3, dimnames = list(c('north', 'south'), c('q1', 'q2', 'q3'))) # Or attach the names afterwards rownames(sales) <- c('north', 'south') colnames(sales) <- c('q1', 'q2', 'q3') # Read the names back as a list of two character vectors dimnames(sales) # Names make label based slicing possible sales['north', 'q2']
| Función | Lee | Sets |
|---|---|---|
| dimnames(m) | Ambas dimensiones como una lista de dos vectores | dimnames(m) <- list(rows, cols) |
| nombres de fila(m) | Las etiquetas de fila | nombresfilas(m) <- filas |
| nombres de columna(m) | Las etiquetas de columna | colnames(m) <- cols |
| dim(m) | Filas y columnas como dos nĆŗmeros enteros | dim(m) <- c(nrow, ncol) |
Una vez que existen las etiquetas, sales['north', 'q2'] es mucho mÔs claro que sales[1, 2] y sobrevive a una reordenación de las filas. Establecer un componente dimnames en NULL elimina ese conjunto de etiquetas nuevamente, y una matriz convertida con as.data.frame() lleva sus nombres de fila y columna directamente a la marco de datos.
Matrix OperaOperaciones en R: Aritmética, transposición y multiplicación
La aritmética con matrices es donde la regla de un solo tipo resulta ventajosa. R base maneja todo el conjunto sin un paquete adicional, pero dos operadores son fÔciles de confundir: * multiplica elemento por elemento, mientras que %*% realiza una verdadera multiplicación de matrices y requiere que las columnas del operando izquierdo coincidan con las filas del operando derecho.
m1 <- matrix(1:4, nrow = 2) m2 <- matrix(5:8, nrow = 2) m1 + m2 # element by element addition m1 * m2 # element by element product, NOT matrix multiplication m1 %*% m2 # true matrix multiplication t(m1) # transpose: rows become columns solve(m1) # inverse, for a square matrix that is not singular rowSums(m1) # one total per row colMeans(m1) # one mean per column apply(m1, 1, max) # any function, applied row by row
- t(m)Transpone la matriz, de modo que el elemento [i, j] se convierte en [j, i]. Los nombres de las dimensiones se conservan.
- resolver(m): Devuelve la inversa de una matriz cuadrada no singular, y solve(a, b) resuelve un sistema lineal.
- Sumas de filas / Sumas de columnas / Medias de filas / Medias de columnas: Documentado como equivalente a apply() con suma o media, pero mucho mƔs rƔpido.
- aplicar(m, MARGEN, DIVERSIĆN): MARGIN = 1 recorre las filas y MARGIN = 2 recorre las columnas, para cualquier función que proporcione.
- diagnóstico, detección, producción cruzada: Diagonal, determinante y la forma mÔs rÔpida de t(x) %*% y.
Debido a que estas operaciones estĆ”n vectorizadas, reemplazan los bucles en lugar de estar dentro de ellos. Un resumen que requerirĆa un bucle for anidado sobre miles de celdas se convierte en una sola llamada a colMeans(), lo cual es importante en cuanto aumenta el volumen de datos.
Matriz vs. Marco de datos vs. Arreglo en R
Las matrices, los marcos de datos y los arreglos se ven rectangulares en la consola, pero responden a preguntas diferentes. La tabla los coloca uno al lado del otro.
| Propiedad | Matrix | Marco de datos | Formación |
|---|---|---|---|
| Dimensiones | Exactamente 2 | Exactamente 2 | Cualquier nĆŗmero |
| Tipos de columna | Un tipo para todo el objeto | Un tipo diferente por columna | Un tipo para todo el objeto |
| Construido con | matriz() | data.frame() | formación() |
| Uso tĆpico | CĆ”lculo numĆ©rico y Ć”lgebra lineal | Datos de observación mixtos | Tablas apiladas, como recuentos por aƱo |
| Etiquetas de fila | dimnames opcionales | Los nombres de las filas siempre estƔn presentes. | dimnames opcionales |
# A matrix holds one type only, so mixing coerces everything to character mixed <- matrix(c(1, 2, 'a', 'b'), nrow = 2) class(mixed[1, 1]) # Convert between the structures as.data.frame(matrix_c) as.matrix(mtcars) # A matrix is the two dimensional case of an array is.matrix(matrix_c) inherits(matrix_c, 'array')
Recurre a una matriz cuando cada celda es del mismo tipo de nĆŗmero y el trabajo es aritmĆ©tico. Recurre a una marco de datos cuando las columnas contienen diferentes tipos, por ejemplo un nombre de carĆ”cter junto a un precio numĆ©rico y un factor. Alcanza un lista cuando las partes tienen longitudes diferentes, y para una matriz cuando existe un tercer Ćndice, como tiempo o región. La conversión en cualquier dirección es económica con as.matrix() y as.data.frame(), por lo que la estructura puede seguir la tarea en lugar de al revĆ©s.




