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.

  • 🧩 Estructura: Una matriz es un vector con un atributo de dimensión, por lo que cada celda debe compartir un mismo tipo de dato.
  • šŸ› ļø Creación: La función matrix(data, nrow, ncol, byrow) organiza una secuencia y R deduce la dimensión que falta.
  • šŸ”„ Completar el pedido: byrow = FALSE rellena columna por columna, mientras que byrow = TRUE rellena fila por fila.
  • āž• Crecimiento: La función cbind() agrega columnas y la función rbind() agrega filas, siempre que la dimensión compartida coincida.
  • āœ‚ Rebanar: m[fila, columna] lee primero las filas, y un lado en blanco selecciona todo lo que hay en ese lado.
  • šŸ·ļø Etiquetas: dimnames, rownames() y colnames() reemplazan los marcadores de posición [,1] con nombres legibles.
  • āž•āž– AritmĆ©tica: El asterisco multiplica elemento por elemento, mientras que %*% realiza una multiplicación de matrices.

Función de matriz en R: Crear, imprimir, agregar columna y segmentar.

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.

Disposición de filas y columnas de una función matricial en R.

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.

Salida de consola de matrix_a rellenada fila por fila con byrow = TRUE

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:

Salida de consola de matrix_b rellenada columna por columna con byrow = FALSE

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.

Resultados en consola de las cuatro expresiones de segmentación de matrices en R.

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.

Preguntas Frecuentes

R recicla los valores en lugar de rechazarlos, por lo que matrix(1:3, nrow = 2, ncol = 3) repite la secuencia. Solo aparece una advertencia cuando la longitud no es un múltiplo exacto del número de celdas, lo que hace que el reciclaje silencioso sea un error fÔcil de pasar por alto.

Utilice un Ć­ndice negativo: m[-2, ] elimina la segunda fila y m[, -3] elimina la tercera columna. Se pueden eliminar varias a la vez con m[-c(1, 4), ]. El objeto original permanece sin cambios hasta que se le asigne el resultado.

Al seleccionar una sola fila o columna, se elimina la dimensión vacía por defecto. Añada `drop = FALSE`, como en `m[1, , drop = FALSE]`, para mantener una matriz de una sola fila. Esto es importante cuando el resultado se pasa a una función que espera dos dimensiones.

La función which(m == value, arr.ind = TRUE) devuelve un resultado de dos columnas que indica la fila y la columna de cada coincidencia. Sin arr.ind, la respuesta es un único índice lineal que recorre las columnas, lo cual rara vez es lo que se busca.

Utilice array(data, dim = c(rows, columns, layers)) o asigne dim(x) directamente a un vector. El seccionamiento toma entonces un índice por dimensión, como a[2, 3, 1]. Una matriz es simplemente el caso bidimensional de un array.

Sí. La documentación de referencia de R indica que rowSums y colMeans son equivalentes a apply() con sum o mean, pero mucho mÔs rÔpidos, y ambos superan a un bucle for explícito porque la iteración se realiza en código compilado en lugar de en el intérprete.

El ajuste de modelos es Ôlgebra lineal: las características forman una matriz, los coeficientes forman un vector y la predicción es un único producto %*%. Muchos aprendizaje automÔtico Por lo tanto, los paquetes requieren una matriz numérica en lugar de un marco de datos como entrada.

Sí. Copiloto de GitHub Se ejecuta en RStudio 2023.09.0 y versiones posteriores y completa el código a partir de los comentarios en el archivo abierto. Compruebe su lógica de dimensiones en RStudio, porque un nrow incorrecto sigue produciendo una matriz vÔlida.

Resumir este post con: