1 Presentación

Las estructuras de datos son fundamentales en R. Permiten almacenar, organizar, transformar y analizar información. En este documento se estudian tres estructuras esenciales: matrices, listas y arrays.

El documento está diseñado como una guía práctica para RStudio, con teoría, ejemplos desarrollados, interpretación y ejercicios.

2 Objetivos

2.1 Objetivo general

Comprender y aplicar matrices, listas y arrays en RStudio para resolver problemas de análisis de datos en distintos contextos.

2.2 Objetivos específicos

  • Identificar las características de matrices, listas y arrays.
  • Crear estructuras de datos en RStudio.
  • Acceder, modificar y analizar elementos.
  • Aplicar estas estructuras a casos reales.
  • Integrar matrices, listas y arrays en problemas de ciencia de datos.

3 Capítulo 1. Introducción a las estructuras de datos en R

Una estructura de datos es una forma organizada de almacenar información dentro de un lenguaje de programación.

En R se utilizan con frecuencia:

  • Vectores.
  • Matrices.
  • Arrays.
  • Listas.
  • Data frames.

3.1 Comparación general

Estructura Tipo de datos Dimensión Característica principal
Vector Homogéneo 1 Una sola secuencia de datos
Matriz Homogéneo 2 Filas y columnas
Array Homogéneo 3 o más Datos multidimensionales
Lista Heterogéneo Variable Puede almacenar diferentes objetos
Data frame Mixto por columnas 2 Tabla de datos

3.2 Ejemplo de vector

edades <- c(18, 20, 25, 30)
edades
## [1] 18 20 25 30

3.3 Ejemplo de matriz

A <- matrix(c(1, 2, 3, 4), nrow = 2)
A
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4

3.4 Ejemplo de lista

persona <- list(
  nombre = "Ana",
  edad = 25,
  carrera = "Estadística"
)

persona
## $nombre
## [1] "Ana"
## 
## $edad
## [1] 25
## 
## $carrera
## [1] "Estadística"

3.5 Ejemplo de array

B <- array(1:12, dim = c(2, 3, 2))
B
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    3    5
## [2,]    2    4    6
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    7    9   11
## [2,]    8   10   12

4 Capítulo 2. Matrices en RStudio

4.1 Definición

Una matriz es una estructura bidimensional compuesta por filas y columnas. Todos sus elementos deben ser del mismo tipo.

Matemáticamente, una matriz se representa como:

\[ A = \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{pmatrix} \]

Esta matriz tiene 2 filas y 3 columnas.

4.2 Crear matrices

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

4.3 Crear matrices por filas

M_filas <- matrix(
  c(1, 2, 3, 4, 5, 6),
  nrow = 2,
  byrow = TRUE
)

M_filas
##      [,1] [,2] [,3]
## [1,]    1    2    3
## [2,]    4    5    6

4.4 Funciones básicas

nrow(M_filas)
## [1] 2
ncol(M_filas)
## [1] 3
dim(M_filas)
## [1] 2 3

4.5 Operaciones básicas

A <- matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE)
B <- matrix(c(5, 6, 7, 8), nrow = 2, byrow = TRUE)

A + B
##      [,1] [,2]
## [1,]    6    8
## [2,]   10   12
A - B
##      [,1] [,2]
## [1,]   -4   -4
## [2,]   -4   -4
A * B
##      [,1] [,2]
## [1,]    5   12
## [2,]   21   32
A %*% B
##      [,1] [,2]
## [1,]   19   22
## [2,]   43   50
t(A)
##      [,1] [,2]
## [1,]    1    3
## [2,]    2    4
det(A)
## [1] -2
solve(A)
##      [,1] [,2]
## [1,] -2.0  1.0
## [2,]  1.5 -0.5

5 Capítulo 3. Ejemplos de matrices

5.1 Ejemplo 1. Matriz de ventas por producto

Contexto: una empresa registra las ventas de dos sucursales para tres productos.

ventas <- matrix(
  c(120, 150, 180,
    200, 220, 250),
  nrow = 2,
  byrow = TRUE
)

rownames(ventas) <- c("Sucursal_A", "Sucursal_B")
colnames(ventas) <- c("Producto_1", "Producto_2", "Producto_3")

ventas
##            Producto_1 Producto_2 Producto_3
## Sucursal_A        120        150        180
## Sucursal_B        200        220        250
rowSums(ventas)
## Sucursal_A Sucursal_B 
##        450        670
colSums(ventas)
## Producto_1 Producto_2 Producto_3 
##        320        370        430

Interpretación: rowSums() calcula el total vendido por sucursal y colSums() calcula el total vendido por producto.

5.2 Ejemplo 2. Matriz de notas de estudiantes

notas <- matrix(
  c(4.2, 3.8, 4.5,
    3.5, 4.0, 4.1,
    4.8, 4.7, 5.0),
  nrow = 3,
  byrow = TRUE
)

rownames(notas) <- c("Ana", "Luis", "Carlos")
colnames(notas) <- c("Parcial_1", "Parcial_2", "Parcial_3")

notas
##        Parcial_1 Parcial_2 Parcial_3
## Ana          4.2       3.8       4.5
## Luis         3.5       4.0       4.1
## Carlos       4.8       4.7       5.0
rowMeans(notas)
##      Ana     Luis   Carlos 
## 4.166667 3.866667 4.833333
colMeans(notas)
## Parcial_1 Parcial_2 Parcial_3 
##  4.166667  4.166667  4.533333

5.3 Ejemplo 3. Matriz de gastos mensuales

gastos <- matrix(
  c(800, 600, 400,
    900, 700, 500,
    750, 650, 450),
  nrow = 3,
  byrow = TRUE
)

rownames(gastos) <- c("Enero", "Febrero", "Marzo")
colnames(gastos) <- c("Arriendo", "Comida", "Transporte")

gastos
##         Arriendo Comida Transporte
## Enero        800    600        400
## Febrero      900    700        500
## Marzo        750    650        450
rowSums(gastos)
##   Enero Febrero   Marzo 
##    1800    2100    1850
colSums(gastos)
##   Arriendo     Comida Transporte 
##       2450       1950       1350

5.4 Ejemplo 4. Matriz de producción agrícola

produccion_agricola <- matrix(
  c(30, 40, 35,
    50, 45, 55,
    20, 25, 30),
  nrow = 3,
  byrow = TRUE
)

rownames(produccion_agricola) <- c("Finca_1", "Finca_2", "Finca_3")
colnames(produccion_agricola) <- c("Maiz", "Cafe", "Arroz")

produccion_agricola
##         Maiz Cafe Arroz
## Finca_1   30   40    35
## Finca_2   50   45    55
## Finca_3   20   25    30
colSums(produccion_agricola)
##  Maiz  Cafe Arroz 
##   100   110   120

5.5 Ejemplo 5. Matriz de pacientes por hospital

pacientes <- matrix(
  c(50, 30, 20,
    60, 35, 25,
    45, 40, 30),
  nrow = 3,
  byrow = TRUE
)

rownames(pacientes) <- c("Hospital_A", "Hospital_B", "Hospital_C")
colnames(pacientes) <- c("Urgencias", "Consulta", "Cirugia")

pacientes
##            Urgencias Consulta Cirugia
## Hospital_A        50       30      20
## Hospital_B        60       35      25
## Hospital_C        45       40      30
rowSums(pacientes)
## Hospital_A Hospital_B Hospital_C 
##        100        120        115

5.6 Ejemplo 6. Matriz de temperaturas

temperatura <- matrix(
  c(18, 20, 22,
    19, 21, 23,
    17, 20, 21,
    16, 19, 20),
  nrow = 4,
  byrow = TRUE
)

rownames(temperatura) <- c("Lunes", "Martes", "Miercoles", "Jueves")
colnames(temperatura) <- c("Manana", "Tarde", "Noche")

temperatura
##           Manana Tarde Noche
## Lunes         18    20    22
## Martes        19    21    23
## Miercoles     17    20    21
## Jueves        16    19    20
rowMeans(temperatura)
##     Lunes    Martes Miercoles    Jueves 
##  20.00000  21.00000  19.33333  18.33333

5.7 Ejemplo 7. Matriz de inventario

inventario_matriz <- matrix(
  c(15, 20, 10,
    30, 25, 18,
    12, 17, 22),
  nrow = 3,
  byrow = TRUE
)

rownames(inventario_matriz) <- c("Bodega_1", "Bodega_2", "Bodega_3")
colnames(inventario_matriz) <- c("Computadores", "Impresoras", "Tablets")

inventario_matriz
##          Computadores Impresoras Tablets
## Bodega_1           15         20      10
## Bodega_2           30         25      18
## Bodega_3           12         17      22
colSums(inventario_matriz)
## Computadores   Impresoras      Tablets 
##           57           62           50

5.8 Ejemplo 8. Matriz de calificaciones docentes

docentes <- matrix(
  c(4.5, 4.8, 4.7,
    4.2, 4.0, 4.3,
    4.9, 4.8, 5.0),
  nrow = 3,
  byrow = TRUE
)

rownames(docentes) <- c("Profesor_A", "Profesor_B", "Profesor_C")
colnames(docentes) <- c("Pedagogia", "Dominio", "Puntualidad")

docentes
##            Pedagogia Dominio Puntualidad
## Profesor_A       4.5     4.8         4.7
## Profesor_B       4.2     4.0         4.3
## Profesor_C       4.9     4.8         5.0
rowMeans(docentes)
## Profesor_A Profesor_B Profesor_C 
##   4.666667   4.166667   4.900000

5.9 Ejemplo 9. Matriz de accidentes de tránsito

accidentes <- matrix(
  c(12, 8, 15,
    20, 10, 18,
    5, 4, 6),
  nrow = 3,
  byrow = TRUE
)

rownames(accidentes) <- c("Bogota", "Medellin", "Cali")
colnames(accidentes) <- c("Carro", "Moto", "Bus")

accidentes
##          Carro Moto Bus
## Bogota      12    8  15
## Medellin    20   10  18
## Cali         5    4   6
colSums(accidentes)
## Carro  Moto   Bus 
##    37    22    39

5.10 Ejemplo 10. Matriz de ventas de vehículos

vehiculos <- matrix(
  c(15, 10, 8,
    20, 12, 5,
    18, 9, 6),
  nrow = 3,
  byrow = TRUE
)

rownames(vehiculos) <- c("Toyota", "Mazda", "Renault")
colnames(vehiculos) <- c("Enero", "Febrero", "Marzo")

vehiculos
##         Enero Febrero Marzo
## Toyota     15      10     8
## Mazda      20      12     5
## Renault    18       9     6
rowSums(vehiculos)
##  Toyota   Mazda Renault 
##      33      37      33

5.11 Ejemplo 11. Matriz de producción industrial

produccion_industrial <- matrix(
  c(500, 450, 600,
    700, 650, 750,
    400, 420, 390),
  nrow = 3,
  byrow = TRUE
)

rownames(produccion_industrial) <- c("Planta_A", "Planta_B", "Planta_C")
colnames(produccion_industrial) <- c("Turno_1", "Turno_2", "Turno_3")

produccion_industrial
##          Turno_1 Turno_2 Turno_3
## Planta_A     500     450     600
## Planta_B     700     650     750
## Planta_C     400     420     390
apply(produccion_industrial, 1, max)
## Planta_A Planta_B Planta_C 
##      600      750      420

5.12 Ejemplo 12. Matriz de rendimiento académico

rendimiento <- matrix(
  c(85, 90, 88,
    78, 82, 80,
    95, 96, 97),
  nrow = 3,
  byrow = TRUE
)

rownames(rendimiento) <- c("Juan", "Ana", "Luis")
colnames(rendimiento) <- c("Matematicas", "Estadistica", "Programacion")

rendimiento
##      Matematicas Estadistica Programacion
## Juan          85          90           88
## Ana           78          82           80
## Luis          95          96           97
rowMeans(rendimiento)
##     Juan      Ana     Luis 
## 87.66667 80.00000 96.00000

5.13 Ejemplo 13. Matriz de consumo energético

energia <- matrix(
  c(120, 135, 128,
    200, 210, 205,
    90, 100, 95),
  nrow = 3,
  byrow = TRUE
)

rownames(energia) <- c("Casa_1", "Casa_2", "Casa_3")
colnames(energia) <- c("Semana_1", "Semana_2", "Semana_3")

energia
##        Semana_1 Semana_2 Semana_3
## Casa_1      120      135      128
## Casa_2      200      210      205
## Casa_3       90      100       95
rowMeans(energia)
##   Casa_1   Casa_2   Casa_3 
## 127.6667 205.0000  95.0000

5.14 Ejemplo 14. Matriz de presupuesto municipal

presupuesto <- matrix(
  c(300, 250, 200,
    400, 380, 350,
    150, 170, 160),
  nrow = 3,
  byrow = TRUE
)

rownames(presupuesto) <- c("Educacion", "Salud", "Deporte")
colnames(presupuesto) <- c("2024", "2025", "2026")

presupuesto
##           2024 2025 2026
## Educacion  300  250  200
## Salud      400  380  350
## Deporte    150  170  160
rowSums(presupuesto)
## Educacion     Salud   Deporte 
##       750      1130       480

5.15 Ejemplo 15. Matriz de indicadores financieros

indicadores <- matrix(
  c(0.12, 0.15, 0.18,
    0.08, 0.09, 0.10,
    0.20, 0.22, 0.25),
  nrow = 3,
  byrow = TRUE
)

rownames(indicadores) <- c("Rentabilidad", "Liquidez", "Endeudamiento")
colnames(indicadores) <- c("2023", "2024", "2025")

indicadores
##               2023 2024 2025
## Rentabilidad  0.12 0.15 0.18
## Liquidez      0.08 0.09 0.10
## Endeudamiento 0.20 0.22 0.25
rowMeans(indicadores)
##  Rentabilidad      Liquidez Endeudamiento 
##     0.1500000     0.0900000     0.2233333

6 Capítulo 4. Listas en RStudio

6.1 Definición

Una lista es una estructura flexible que puede almacenar objetos de diferentes tipos: números, texto, vectores, matrices, arrays, data frames, modelos y otras listas.

6.2 Crear una lista

lista_basica <- list(
  nombre = "Carlos",
  edad = 28,
  notas = c(4.0, 4.5, 5.0),
  aprobado = TRUE
)

lista_basica
## $nombre
## [1] "Carlos"
## 
## $edad
## [1] 28
## 
## $notas
## [1] 4.0 4.5 5.0
## 
## $aprobado
## [1] TRUE

6.3 Acceso a elementos

lista_basica$nombre
## [1] "Carlos"
lista_basica[[1]]
## [1] "Carlos"
lista_basica[1]
## $nombre
## [1] "Carlos"

6.4 Diferencia entre [ ] y [[ ]]

class(lista_basica[1])
## [1] "list"
class(lista_basica[[1]])
## [1] "character"

7 Capítulo 5. Ejemplos de listas y listas con matrices

7.1 Ejemplo 16. Información de estudiante

estudiante <- list(
  nombre = "Ana",
  edad = 21,
  carrera = "Estadística"
)

estudiante
## $nombre
## [1] "Ana"
## 
## $edad
## [1] 21
## 
## $carrera
## [1] "Estadística"
estudiante$nombre
## [1] "Ana"

7.2 Ejemplo 17. Información de empleado

empleado <- list(
  nombre = "Carlos",
  salario = 3500000,
  antiguedad = 5
)

empleado
## $nombre
## [1] "Carlos"
## 
## $salario
## [1] 3500000
## 
## $antiguedad
## [1] 5
empleado$salario
## [1] 3500000

7.3 Ejemplo 18. Notas de un estudiante

notas_lista <- list(
  parcial1 = 4.2,
  parcial2 = 3.8,
  parcial3 = 4.5
)

notas_lista
## $parcial1
## [1] 4.2
## 
## $parcial2
## [1] 3.8
## 
## $parcial3
## [1] 4.5
mean(unlist(notas_lista))
## [1] 4.166667

7.4 Ejemplo 19. Cliente con compras

cliente <- list(
  nombre = "Laura",
  compras = c(250, 180, 320)
)

cliente
## $nombre
## [1] "Laura"
## 
## $compras
## [1] 250 180 320
sum(cliente$compras)
## [1] 750
mean(cliente$compras)
## [1] 250

7.5 Ejemplo 20. Universidad

universidad_simple <- list(
  facultad = "Ingeniería",
  estudiantes = 1200,
  profesores = 85
)

universidad_simple
## $facultad
## [1] "Ingeniería"
## 
## $estudiantes
## [1] 1200
## 
## $profesores
## [1] 85
universidad_simple$estudiantes / universidad_simple$profesores
## [1] 14.11765

7.6 Ejemplo 21. Hospital

hospital_simple <- list(
  pacientes = 250,
  medicos = 40,
  camas = 180
)

hospital_simple
## $pacientes
## [1] 250
## 
## $medicos
## [1] 40
## 
## $camas
## [1] 180
hospital_simple$pacientes / hospital_simple$camas
## [1] 1.388889

7.7 Ejemplo 22. Lista con matriz de ventas

empresa_ventas <- list(
  nombre = "Comercial Andes",
  ventas = matrix(
    c(120, 150, 180,
      200, 230, 260),
    nrow = 2,
    byrow = TRUE
  )
)

colnames(empresa_ventas$ventas) <- c("Enero", "Febrero", "Marzo")
rownames(empresa_ventas$ventas) <- c("Producto_A", "Producto_B")

empresa_ventas$ventas
##            Enero Febrero Marzo
## Producto_A   120     150   180
## Producto_B   200     230   260
rowSums(empresa_ventas$ventas)
## Producto_A Producto_B 
##        450        690

7.8 Ejemplo 23. Lista con matriz de notas

curso <- list(
  asignatura = "Estadística",
  notas = matrix(
    c(4.0, 3.8, 4.5,
      3.5, 4.2, 4.0),
    nrow = 2,
    byrow = TRUE
  )
)

rownames(curso$notas) <- c("Estudiante_1", "Estudiante_2")
colnames(curso$notas) <- c("Quiz", "Parcial", "Final")

curso$notas
##              Quiz Parcial Final
## Estudiante_1  4.0     3.8   4.5
## Estudiante_2  3.5     4.2   4.0
rowMeans(curso$notas)
## Estudiante_1 Estudiante_2 
##          4.1          3.9

7.9 Ejemplo 24. Lista financiera

finanzas <- list(
  empresa = "Inversiones del Norte",
  ingresos = matrix(
    c(5000, 6200, 7100,
      3000, 3500, 3900),
    nrow = 2,
    byrow = TRUE
  )
)

rownames(finanzas$ingresos) <- c("Ingresos", "Gastos")
colnames(finanzas$ingresos) <- c("2023", "2024", "2025")

finanzas$ingresos
##          2023 2024 2025
## Ingresos 5000 6200 7100
## Gastos   3000 3500 3900
finanzas$ingresos["Ingresos", ] - finanzas$ingresos["Gastos", ]
## 2023 2024 2025 
## 2000 2700 3200

7.10 Ejemplo 25. Lista con matriz de clientes

clientes <- list(
  segmento = "Clientes premium",
  datos = matrix(
    c(25, 3000,
      30, 4500,
      40, 6000),
    nrow = 3,
    byrow = TRUE
  )
)

colnames(clientes$datos) <- c("Edad", "Ingreso")
rownames(clientes$datos) <- c("Cliente_1", "Cliente_2", "Cliente_3")

clientes$datos
##           Edad Ingreso
## Cliente_1   25    3000
## Cliente_2   30    4500
## Cliente_3   40    6000
colMeans(clientes$datos)
##       Edad    Ingreso 
##   31.66667 4500.00000

7.11 Ejemplo 26. Lista deportiva

equipo <- list(
  nombre = "Tigres",
  rendimiento = matrix(
    c(2, 1, 3,
      1, 0, 2,
      3, 2, 4),
    nrow = 3,
    byrow = TRUE
  )
)

rownames(equipo$rendimiento) <- c("Jugador_1", "Jugador_2", "Jugador_3")
colnames(equipo$rendimiento) <- c("Goles", "Asistencias", "Partidos")

equipo$rendimiento
##           Goles Asistencias Partidos
## Jugador_1     2           1        3
## Jugador_2     1           0        2
## Jugador_3     3           2        4
rowSums(equipo$rendimiento)
## Jugador_1 Jugador_2 Jugador_3 
##         6         3         9

7.12 Ejemplo 27. Lista de encuesta

encuesta <- list(
  tema = "Satisfacción del servicio",
  respuestas = matrix(
    c(5, 4, 3,
      4, 5, 4,
      3, 4, 5),
    nrow = 3,
    byrow = TRUE
  )
)

colnames(encuesta$respuestas) <- c("Calidad", "Rapidez", "Atencion")
rownames(encuesta$respuestas) <- c("Persona_1", "Persona_2", "Persona_3")

encuesta$respuestas
##           Calidad Rapidez Atencion
## Persona_1       5       4        3
## Persona_2       4       5        4
## Persona_3       3       4        5
colMeans(encuesta$respuestas)
##  Calidad  Rapidez Atencion 
## 4.000000 4.333333 4.000000

7.13 Ejemplo 28. Lista de empleados y salarios

empresa_salarios <- list(
  nombre = "DataCorp",
  salarios = matrix(
    c(3000, 3500,
      4500, 5000,
      6000, 6500),
    nrow = 3,
    byrow = TRUE
  )
)

colnames(empresa_salarios$salarios) <- c("Salario_2024", "Salario_2025")
rownames(empresa_salarios$salarios) <- c("Empleado_1", "Empleado_2", "Empleado_3")

empresa_salarios$salarios
##            Salario_2024 Salario_2025
## Empleado_1         3000         3500
## Empleado_2         4500         5000
## Empleado_3         6000         6500
rowMeans(empresa_salarios$salarios)
## Empleado_1 Empleado_2 Empleado_3 
##       3250       4750       6250

7.14 Ejemplo 29. Lista de pacientes

hospital_pacientes <- list(
  area = "Cardiologia",
  pacientes = matrix(
    c(70, 120,
      65, 110,
      80, 140),
    nrow = 3,
    byrow = TRUE
  )
)

colnames(hospital_pacientes$pacientes) <- c("Peso", "Presion")
rownames(hospital_pacientes$pacientes) <- c("Paciente_1", "Paciente_2", "Paciente_3")

hospital_pacientes$pacientes
##            Peso Presion
## Paciente_1   70     120
## Paciente_2   65     110
## Paciente_3   80     140
colMeans(hospital_pacientes$pacientes)
##      Peso   Presion 
##  71.66667 123.33333

7.15 Ejemplo 30. Lista de investigación

investigacion <- list(
  proyecto = "Modelo de IA",
  resultados = matrix(
    c(0.85, 0.88,
      0.92, 0.91,
      0.89, 0.93),
    nrow = 3,
    byrow = TRUE
  )
)

colnames(investigacion$resultados) <- c("Precision", "Recall")
rownames(investigacion$resultados) <- c("Modelo_1", "Modelo_2", "Modelo_3")

investigacion$resultados
##          Precision Recall
## Modelo_1      0.85   0.88
## Modelo_2      0.92   0.91
## Modelo_3      0.89   0.93
apply(investigacion$resultados, 2, mean)
## Precision    Recall 
## 0.8866667 0.9066667

8 Capítulo 6. Arrays en RStudio

8.1 Definición

Un array es una estructura multidimensional. A diferencia de una matriz, que tiene filas y columnas, un array puede tener tres o más dimensiones.

Un array puede representarse como:

\[ Array = Filas \times Columnas \times Capas \]

8.2 Crear un array

array_basico <- array(
  1:24,
  dim = c(3, 4, 2)
)

array_basico
## , , 1
## 
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
## 
## , , 2
## 
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24

8.3 Acceder a elementos

array_basico[2, 3, 1]
## [1] 8
array_basico[, , 1]
##      [,1] [,2] [,3] [,4]
## [1,]    1    4    7   10
## [2,]    2    5    8   11
## [3,]    3    6    9   12
array_basico[, , 2]
##      [,1] [,2] [,3] [,4]
## [1,]   13   16   19   22
## [2,]   14   17   20   23
## [3,]   15   18   21   24

9 Capítulo 7. Ejemplos de arrays

9.1 Ejemplo 31. Array de ventas por tienda, producto y año

ventas_array <- array(
  c(100, 120, 140,
    160, 180, 200,
    110, 130, 150,
    170, 190, 210),
  dim = c(2, 3, 2)
)

dimnames(ventas_array) <- list(
  Tienda = c("Tienda_A", "Tienda_B"),
  Producto = c("Producto_1", "Producto_2", "Producto_3"),
  Año = c("2024", "2025")
)

ventas_array
## , , Año = 2024
## 
##           Producto
## Tienda     Producto_1 Producto_2 Producto_3
##   Tienda_A        100        140        180
##   Tienda_B        120        160        200
## 
## , , Año = 2025
## 
##           Producto
## Tienda     Producto_1 Producto_2 Producto_3
##   Tienda_A        110        150        190
##   Tienda_B        130        170        210
ventas_array[, , "2024"]
##           Producto
## Tienda     Producto_1 Producto_2 Producto_3
##   Tienda_A        100        140        180
##   Tienda_B        120        160        200
ventas_array[, , "2025"]
##           Producto
## Tienda     Producto_1 Producto_2 Producto_3
##   Tienda_A        110        150        190
##   Tienda_B        130        170        210

9.2 Ejemplo 32. Array de temperaturas por ciudad, día y jornada

clima <- array(
  c(18, 20,
    21, 23,
    17, 19,
    20, 22,
    16, 18,
    19, 21),
  dim = c(2, 3, 2)
)

dimnames(clima) <- list(
  Ciudad = c("Bogota", "Medellin"),
  Dia = c("Lunes", "Martes", "Miercoles"),
  Jornada = c("Manana", "Tarde")
)

clima
## , , Jornada = Manana
## 
##           Dia
## Ciudad     Lunes Martes Miercoles
##   Bogota      18     21        17
##   Medellin    20     23        19
## 
## , , Jornada = Tarde
## 
##           Dia
## Ciudad     Lunes Martes Miercoles
##   Bogota      20     16        19
##   Medellin    22     18        21
clima[, , "Manana"]
##           Dia
## Ciudad     Lunes Martes Miercoles
##   Bogota      18     21        17
##   Medellin    20     23        19

9.3 Ejemplo 33. Array de pacientes por hospital, servicio y mes

hospitales <- array(
  1:18,
  dim = c(3, 3, 2)
)

dimnames(hospitales) <- list(
  Hospital = c("Hospital_A", "Hospital_B", "Hospital_C"),
  Servicio = c("Urgencias", "Consulta", "Cirugia"),
  Mes = c("Enero", "Febrero")
)

hospitales
## , , Mes = Enero
## 
##             Servicio
## Hospital     Urgencias Consulta Cirugia
##   Hospital_A         1        4       7
##   Hospital_B         2        5       8
##   Hospital_C         3        6       9
## 
## , , Mes = Febrero
## 
##             Servicio
## Hospital     Urgencias Consulta Cirugia
##   Hospital_A        10       13      16
##   Hospital_B        11       14      17
##   Hospital_C        12       15      18
hospitales[, , "Enero"]
##             Servicio
## Hospital     Urgencias Consulta Cirugia
##   Hospital_A         1        4       7
##   Hospital_B         2        5       8
##   Hospital_C         3        6       9

9.4 Ejemplo 34. Array de calificaciones por estudiante, materia y corte

calificaciones <- array(
  c(4.0, 3.5, 4.8,
    3.8, 4.2, 4.7,
    4.5, 4.0, 5.0,
    4.1, 3.9, 4.6),
  dim = c(3, 2, 2)
)

dimnames(calificaciones) <- list(
  Estudiante = c("Ana", "Luis", "Carlos"),
  Materia = c("Matematicas", "Estadistica"),
  Corte = c("Corte_1", "Corte_2")
)

calificaciones
## , , Corte = Corte_1
## 
##           Materia
## Estudiante Matematicas Estadistica
##     Ana            4.0         3.8
##     Luis           3.5         4.2
##     Carlos         4.8         4.7
## 
## , , Corte = Corte_2
## 
##           Materia
## Estudiante Matematicas Estadistica
##     Ana            4.5         4.1
##     Luis           4.0         3.9
##     Carlos         5.0         4.6
calificaciones[, , "Corte_1"]
##           Materia
## Estudiante Matematicas Estadistica
##     Ana            4.0         3.8
##     Luis           3.5         4.2
##     Carlos         4.8         4.7

9.5 Ejemplo 35. Array de producción por finca, cultivo y semestre

produccion_array <- array(
  c(20, 30,
    25, 35,
    40, 50,
    45, 55,
    30, 35,
    38, 42),
  dim = c(2, 3, 2)
)

dimnames(produccion_array) <- list(
  Finca = c("Finca_1", "Finca_2"),
  Cultivo = c("Cafe", "Maiz", "Arroz"),
  Semestre = c("Semestre_1", "Semestre_2")
)

produccion_array
## , , Semestre = Semestre_1
## 
##          Cultivo
## Finca     Cafe Maiz Arroz
##   Finca_1   20   25    40
##   Finca_2   30   35    50
## 
## , , Semestre = Semestre_2
## 
##          Cultivo
## Finca     Cafe Maiz Arroz
##   Finca_1   45   30    38
##   Finca_2   55   35    42
produccion_array[, , "Semestre_2"]
##          Cultivo
## Finca     Cafe Maiz Arroz
##   Finca_1   45   30    38
##   Finca_2   55   35    42

9.6 Ejemplo 36. Array de imagen RGB

set.seed(123)

imagen <- array(
  runif(4 * 4 * 3),
  dim = c(4, 4, 3)
)

dimnames(imagen) <- list(
  Fila = paste0("Fila_", 1:4),
  Columna = paste0("Col_", 1:4),
  Canal = c("Rojo", "Verde", "Azul")
)

imagen
## , , Canal = Rojo
## 
##         Columna
## Fila         Col_1     Col_2     Col_3     Col_4
##   Fila_1 0.2875775 0.9404673 0.5514350 0.6775706
##   Fila_2 0.7883051 0.0455565 0.4566147 0.5726334
##   Fila_3 0.4089769 0.5281055 0.9568333 0.1029247
##   Fila_4 0.8830174 0.8924190 0.4533342 0.8998250
## 
## , , Canal = Verde
## 
##         Columna
## Fila          Col_1     Col_2     Col_3     Col_4
##   Fila_1 0.24608773 0.8895393 0.6557058 0.2891597
##   Fila_2 0.04205953 0.6928034 0.7085305 0.1471136
##   Fila_3 0.32792072 0.6405068 0.5440660 0.9630242
##   Fila_4 0.95450365 0.9942698 0.5941420 0.9022990
## 
## , , Canal = Azul
## 
##         Columna
## Fila          Col_1     Col_2     Col_3     Col_4
##   Fila_1 0.69070528 0.7584595 0.1428000 0.1524447
##   Fila_2 0.79546742 0.2164079 0.4145463 0.1388061
##   Fila_3 0.02461368 0.3181810 0.4137243 0.2330341
##   Fila_4 0.47779597 0.2316258 0.3688455 0.4659625
imagen[, , "Rojo"]
##         Columna
## Fila         Col_1     Col_2     Col_3     Col_4
##   Fila_1 0.2875775 0.9404673 0.5514350 0.6775706
##   Fila_2 0.7883051 0.0455565 0.4566147 0.5726334
##   Fila_3 0.4089769 0.5281055 0.9568333 0.1029247
##   Fila_4 0.8830174 0.8924190 0.4533342 0.8998250

9.7 Ejemplo 37. Array de inventario por bodega, producto y trimestre

inventario_array <- array(
  c(10, 15,
    20, 25,
    30, 35,
    12, 18,
    22, 28,
    32, 38),
  dim = c(2, 3, 2)
)

dimnames(inventario_array) <- list(
  Bodega = c("Bodega_A", "Bodega_B"),
  Producto = c("Laptop", "Tablet", "Monitor"),
  Trimestre = c("T1", "T2")
)

inventario_array
## , , Trimestre = T1
## 
##           Producto
## Bodega     Laptop Tablet Monitor
##   Bodega_A     10     20      30
##   Bodega_B     15     25      35
## 
## , , Trimestre = T2
## 
##           Producto
## Bodega     Laptop Tablet Monitor
##   Bodega_A     12     22      32
##   Bodega_B     18     28      38
inventario_array[, , "T1"]
##           Producto
## Bodega     Laptop Tablet Monitor
##   Bodega_A     10     20      30
##   Bodega_B     15     25      35
inventario_array[, , "T2"]
##           Producto
## Bodega     Laptop Tablet Monitor
##   Bodega_A     12     22      32
##   Bodega_B     18     28      38

9.8 Ejemplo 38. Array de sensores IoT

set.seed(456)

sensores <- array(
  round(runif(24, 0, 100), 2),
  dim = c(4, 3, 2)
)

dimnames(sensores) <- list(
  Sensor = c("S1", "S2", "S3", "S4"),
  Variable = c("Temperatura", "Humedad", "Presion"),
  Tiempo = c("Hora_1", "Hora_2")
)

sensores
## , , Tiempo = Hora_1
## 
##       Variable
## Sensor Temperatura Humedad Presion
##     S1        8.96   78.84   23.75
##     S2       21.05   33.20   38.52
##     S3       73.30    8.24   37.29
##     S4       85.21   28.55   21.79
## 
## , , Tiempo = Hora_2
## 
##       Variable
## Sensor Temperatura Humedad Presion
##     S1       75.51   84.31   17.99
##     S2       82.17   45.32   72.17
##     S3       59.89   71.68   90.51
##     S4       65.10   29.12   44.58

9.9 Ejemplo 39. Array de datos biomédicos

set.seed(789)

biomedico <- array(
  round(runif(18, 50, 150), 2),
  dim = c(3, 3, 2)
)

dimnames(biomedico) <- list(
  Paciente = c("Paciente_1", "Paciente_2", "Paciente_3"),
  Variable = c("Glucosa", "Presion", "Frecuencia"),
  Momento = c("Antes", "Despues")
)

biomedico
## , , Momento = Antes
## 
##             Variable
## Paciente     Glucosa Presion Frecuencia
##   Paciente_1  119.99  109.16     107.27
##   Paciente_2   59.35   99.21      66.58
##   Paciente_3   51.19   52.02      85.89
## 
## , , Momento = Despues
## 
##             Variable
## Paciente     Glucosa Presion Frecuencia
##   Paciente_1   84.63   75.26      51.84
##   Paciente_2   81.40   96.59      65.60
##   Paciente_3  100.75   93.07     114.52
biomedico[, , "Antes"]
##             Variable
## Paciente     Glucosa Presion Frecuencia
##   Paciente_1  119.99  109.16     107.27
##   Paciente_2   59.35   99.21      66.58
##   Paciente_3   51.19   52.02      85.89

9.10 Ejemplo 40. Array de ventas trimestrales

set.seed(101)

ventas_trimestre <- array(
  sample(100:500, 24, replace = TRUE),
  dim = c(4, 3, 2)
)

dimnames(ventas_trimestre) <- list(
  Sucursal = c("Norte", "Sur", "Centro", "Occidente"),
  Producto = c("A", "B", "C"),
  Trimestre = c("T1", "T2")
)

ventas_trimestre
## , , Trimestre = T1
## 
##            Producto
## Sucursal      A   B   C
##   Norte     428 450 454
##   Sur       412 416 227
##   Centro    194 414 230
##   Occidente 308 345 387
## 
## , , Trimestre = T2
## 
##            Producto
## Sucursal      A   B   C
##   Norte     108 343 158
##   Sur       451 258 113
##   Centro    454 415 303
##   Occidente 453 194 196
apply(ventas_trimestre, c(2, 3), sum)
##         Trimestre
## Producto   T1   T2
##        A 1342 1466
##        B 1625 1210
##        C 1298  770

10 Capítulo 8. Integración de matrices, listas y arrays

En proyectos reales se pueden combinar estructuras. Por ejemplo, una lista puede almacenar una matriz de empleados y un array de ventas.

10.1 Sistema empresarial completo

sistema_empresa <- list(
  nombre = "Empresa Global",
  empleados = matrix(
    c(30, 3500,
      25, 2800,
      40, 5000),
    nrow = 3,
    byrow = TRUE
  ),
  ventas = array(
    c(100, 120,
      140, 160,
      180, 200,
      110, 130,
      150, 170,
      190, 210),
    dim = c(2, 3, 2)
  )
)

colnames(sistema_empresa$empleados) <- c("Edad", "Salario")
rownames(sistema_empresa$empleados) <- c("Empleado_1", "Empleado_2", "Empleado_3")

dimnames(sistema_empresa$ventas) <- list(
  Sucursal = c("Sucursal_A", "Sucursal_B"),
  Producto = c("Producto_1", "Producto_2", "Producto_3"),
  Año = c("2024", "2025")
)

sistema_empresa$empleados
##            Edad Salario
## Empleado_1   30    3500
## Empleado_2   25    2800
## Empleado_3   40    5000
sistema_empresa$ventas
## , , Año = 2024
## 
##             Producto
## Sucursal     Producto_1 Producto_2 Producto_3
##   Sucursal_A        100        140        180
##   Sucursal_B        120        160        200
## 
## , , Año = 2025
## 
##             Producto
## Sucursal     Producto_1 Producto_2 Producto_3
##   Sucursal_A        110        150        190
##   Sucursal_B        130        170        210
colMeans(sistema_empresa$empleados)
##       Edad    Salario 
##   31.66667 3766.66667
apply(sistema_empresa$ventas, c(2, 3), sum)
##             Año
## Producto     2024 2025
##   Producto_1  220  240
##   Producto_2  300  320
##   Producto_3  380  400

10.2 Sistema universitario completo

sistema_universidad <- list(
  programa = "Estadística",
  estudiantes = matrix(
    c(20, 4.2,
      22, 3.8,
      21, 4.5),
    nrow = 3,
    byrow = TRUE
  ),
  rendimiento = array(
    c(4.0, 3.8, 4.5,
      4.2, 4.1, 4.6,
      3.9, 4.0, 4.4,
      4.3, 4.2, 4.7),
    dim = c(3, 2, 2)
  )
)

colnames(sistema_universidad$estudiantes) <- c("Edad", "Promedio")
rownames(sistema_universidad$estudiantes) <- c("Ana", "Luis", "Carlos")

dimnames(sistema_universidad$rendimiento) <- list(
  Estudiante = c("Ana", "Luis", "Carlos"),
  Materia = c("Matematicas", "Estadistica"),
  Semestre = c("Semestre_1", "Semestre_2")
)

sistema_universidad$estudiantes
##        Edad Promedio
## Ana      20      4.2
## Luis     22      3.8
## Carlos   21      4.5
sistema_universidad$rendimiento
## , , Semestre = Semestre_1
## 
##           Materia
## Estudiante Matematicas Estadistica
##     Ana            4.0         4.2
##     Luis           3.8         4.1
##     Carlos         4.5         4.6
## 
## , , Semestre = Semestre_2
## 
##           Materia
## Estudiante Matematicas Estadistica
##     Ana            3.9         4.3
##     Luis           4.0         4.2
##     Carlos         4.4         4.7

11 Capítulo 9. Aplicaciones en Ciencia de Datos

11.1 Matrices

Las matrices se utilizan en:

  • Regresión lineal.
  • Análisis de componentes principales.
  • Álgebra lineal.
  • Modelos multivariados.

11.2 Listas

Las listas se utilizan en:

  • Objetos de modelos estadísticos.
  • Resultados de algoritmos.
  • Estructuras complejas.

Ejemplo con modelo lineal:

modelo <- lm(mpg ~ wt, data = mtcars)

class(modelo)
## [1] "lm"
names(modelo)
##  [1] "coefficients"  "residuals"     "effects"       "rank"         
##  [5] "fitted.values" "assign"        "qr"            "df.residual"  
##  [9] "xlevels"       "call"          "terms"         "model"
modelo$coefficients
## (Intercept)          wt 
##   37.285126   -5.344472

11.3 Arrays

Los arrays se utilizan en:

  • Imágenes.
  • Redes neuronales.
  • Datos multidimensionales.
  • Sensores.
  • Series por tiempo y espacio.

12 Capítulo 10. Taller práctico

12.1 Ejercicio 1

Construya una matriz de ventas de 4 sucursales y 5 productos. Calcule el total por sucursal y por producto.

12.2 Ejercicio 2

Construya una matriz de calificaciones de 5 estudiantes y 3 evaluaciones. Calcule el promedio por estudiante.

12.3 Ejercicio 3

Construya una lista con información de tres empleados: nombre, salario y años de experiencia.

12.4 Ejercicio 4

Construya una lista que almacene una matriz de ingresos y gastos de una empresa.

12.5 Ejercicio 5

Construya un array de temperaturas para 3 ciudades, 4 días y 2 jornadas.

12.6 Ejercicio 6

Construya un array de inventario para 2 bodegas, 4 productos y 3 meses.

12.7 Ejercicio 7

Construya una lista que contenga una matriz de empleados y un array de ventas.

12.8 Ejercicio 8

Construya un sistema hospitalario con una lista que incluya pacientes, médicos y un array de medicamentos por mes.

12.9 Ejercicio 9

Construya un sistema universitario con estudiantes, notas y rendimiento por semestre.

12.10 Ejercicio 10

Construya un sistema empresarial completo integrando matrices, listas y arrays.

13 Capítulo 11. Proyecto integrador

13.1 Caso: Universidad de Ciencia de Datos

Una universidad necesita organizar información académica de sus estudiantes. Para ello se debe construir un sistema en R que permita almacenar:

  • Una matriz con edad y promedio académico.
  • Una lista con información general del programa.
  • Un array con calificaciones por estudiante, asignatura y semestre.

13.2 Desarrollo propuesto

proyecto <- list(
  programa = "Ciencia de Datos",
  estudiantes = matrix(
    c(20, 4.2,
      21, 3.9,
      23, 4.5,
      22, 4.0),
    nrow = 4,
    byrow = TRUE
  ),
  calificaciones = array(
    c(4.0, 3.8, 4.5, 4.1,
      4.2, 4.0, 4.7, 4.3,
      3.9, 3.7, 4.4, 4.0,
      4.1, 4.2, 4.6, 4.5),
    dim = c(4, 2, 2)
  )
)

colnames(proyecto$estudiantes) <- c("Edad", "Promedio")
rownames(proyecto$estudiantes) <- c("Est_1", "Est_2", "Est_3", "Est_4")

dimnames(proyecto$calificaciones) <- list(
  Estudiante = c("Est_1", "Est_2", "Est_3", "Est_4"),
  Asignatura = c("Estadistica", "Programacion"),
  Semestre = c("Semestre_1", "Semestre_2")
)

proyecto$estudiantes
##       Edad Promedio
## Est_1   20      4.2
## Est_2   21      3.9
## Est_3   23      4.5
## Est_4   22      4.0
proyecto$calificaciones
## , , Semestre = Semestre_1
## 
##           Asignatura
## Estudiante Estadistica Programacion
##      Est_1         4.0          4.2
##      Est_2         3.8          4.0
##      Est_3         4.5          4.7
##      Est_4         4.1          4.3
## 
## , , Semestre = Semestre_2
## 
##           Asignatura
## Estudiante Estadistica Programacion
##      Est_1         3.9          4.1
##      Est_2         3.7          4.2
##      Est_3         4.4          4.6
##      Est_4         4.0          4.5
colMeans(proyecto$estudiantes)
##     Edad Promedio 
##    21.50     4.15
apply(proyecto$calificaciones, c(2, 3), mean)
##               Semestre
## Asignatura     Semestre_1 Semestre_2
##   Estadistica         4.1       4.00
##   Programacion        4.3       4.35

13.3 Interpretación

La matriz permite resumir características de los estudiantes. La lista permite integrar varios objetos en un único sistema. El array permite analizar el rendimiento académico por estudiante, asignatura y semestre.

14 Conclusiones

Las matrices, listas y arrays son estructuras esenciales en RStudio.

Las matrices permiten representar información bidimensional homogénea. Las listas permiten almacenar objetos heterogéneos y complejos. Los arrays permiten trabajar con datos multidimensionales.

El dominio de estas estructuras es fundamental para avanzar en estadística, ciencia de datos, machine learning, inteligencia artificial y análisis computacional.

15 Referencias internas de R

Para ampliar el estudio se recomienda revisar en RStudio:

?matrix
?list
?array
?apply
?rowSums
?colSums
?rowMeans
?colMeans