Unidad 2 - Fundamentos de R y Programación
Introducción al Business Analytics · Semana 3 · 06278-ECO
1 Objetivo de la semana
Esta semana NO aprenderemos “programación” en el sentido tradicional. El foco está en interpretación, no en memorizar sintaxis.
¿Qué significa “interpretar” en este contexto?
Significa entender qué hace una herramienta cuando la ejecutamos, cómo leer sus resultados, y cómo conectar esos resultados con decisiones de negocio. No necesitamos ser programadores expertos, necesitamos ser usuarios inteligentes de herramientas analíticas.
1.1 Lo que aprenderemos esta semana
1. Entender qué hace R cuando ejecutamos código
- Qué pasa “por dentro” cuando presionamos ejecutar
- Cómo R almacena información (objetos en memoria)
- Por qué algunos comandos funcionan y otros no
2. Leer e interpretar lo que R nos muestra
- Diferenciar entre resultados normales, advertencias (warnings) y errores
- Entender la consola como “conversación” con R
- Leer el panel Environment para saber qué existe en cada momento
3. Reconocer objetos y estructuras de datos
- Qué es un objeto y por qué todo es un objeto en R
- Diferencia entre vectores (una dimensión) y data frames (tablas)
- Cómo acceder y manipular información básica
2 Interfaz de RStudio
RStudio es un IDE (Entorno de Desarrollo Integrado) que hace más fácil trabajar con R. Organiza su espacio de trabajo en cuatro paneles, cada uno con una función específica.

2.1 Los cuatro paneles principales
2.1.1 Panel superior izquierdo: Source (Editor de scripts)
Este es nuestro “cuaderno de trabajo”. Aquí:
- Escribimos código que queremos guardar y reutilizar
- Documentamos nuestro análisis paso a paso
- Ejecutamos líneas con
Ctrl + Enter(Windows/Linux) oCmd + Enter(Mac)
¿Por qué escribir aquí y no directamente en la consola?
Porque necesitamos poder reproducir nuestro trabajo, corregir errores, y compartir análisis con otros. El script es nuestra “memoria” del proceso analítico.
2.1.2 Panel inferior izquierdo: Console (Consola)
La consola es donde R “nos habla”. Aquí:
- Aparecen los resultados de lo que ejecutamos
- R nos muestra mensajes, advertencias y errores
- Podemos escribir código directamente (pero no se guarda)
Cómo leer la consola
Cuando ejecutamos código, R puede responder de tres formas: - Resultado normal: Muestra el output esperado - Warning (advertencia): Algo inesperado, pero el código continúa - Error: Algo falló y el código se detiene
Aprenderemos a distinguir estos tres casos más adelante en esta misma clase.
2.1.3 Panel superior derecho: Environment / History
Este panel tiene dos pestañas importantes:
Environment (Entorno): Muestra todos los objetos que hemos creado en la sesión actual (datos, variables, resultados). Es como el “inventario” de lo que existe en la memoria de R en este momento.
History (Historial): Registra todos los comandos que hemos ejecutado durante la sesión.
El Environment es tu aliado
Durante todo el curso, el panel Environment será tu mejor referencia. Si un objeto no aparece aquí, R no lo “conoce” y dará error si intentas usarlo. Si ejecutaste código correctamente, deberías ver nuevos objetos aparecer en este panel.
2.1.4 Panel inferior derecho: Files / Plots / Packages / Help
Este panel agrupa varias funcionalidades útiles:
Files: Navegador de archivos del proyecto (carpetas, datos, scripts)
Plots: Visualización de gráficos que generamos
Packages: Listado de paquetes (librerías) instalados y cargados
Help: Documentación de funciones (se abre cuando usamos ?nombre_funcion)
2.2 Flujo de trabajo recomendado
La rutina de trabajo en RStudio
- Escribo código en el panel Source (script)
- Ejecuto la línea o bloque seleccionado (
Ctrl/Cmd + Enter) - Reviso el resultado en la Console (¿funcionó? ¿error? ¿warning?)
- Verifico el Environment (¿se creó el objeto? ¿tiene los valores esperados?)
Este ciclo se repite constantemente durante el análisis de datos. No es necesario memorizarlo, se volverá automático con la práctica.
2.3 Mini-ejercicio: Reconociendo los paneles
Abra RStudio y localice cada panel. Luego:
- En la Console, escriba
2 + 2y presione Enter. ¿Dónde aparece el resultado?
- Escriba
?meanen la consola. ¿En qué panel se abre la ayuda?
Si puede responder estas preguntas, ya entendió la función básica de cada panel. En la siguiente sección aprenderemos a “guardar” resultados para usarlos después.
3 R como calculadora
Antes de trabajar con datos, podemos usar R como calculadora para familiarizarnos con la consola. Esto nos ayuda a entender cómo R ejecuta operaciones y muestra resultados.
3.1 Operaciones aritméticas básicas
R reconoce todos los operadores matemáticos estándar:
Nota importante: Estos resultados aparecen en la consola pero no se guardan en ningún lugar. Si queremos reutilizar un resultado, necesitaremos aprender a “guardarlo” (lo haremos en la siguiente sección sobre objetos).
3.2 Orden de precedencia
R sigue las reglas matemáticas estándar. Las operaciones se evalúan en este orden:
- Paréntesis
( ) - Potencias
^ - Multiplicación
*y división/ - Suma
+y resta-
Regla práctica
Cuando tenga dudas sobre el orden de operaciones, use paréntesis. Es mejor ser explícito que obtener un resultado inesperado.
3.3 Operadores de comparación (anticipo)
R puede comparar valores y devolver respuestas de verdadero o falso:
Nota importante: Para comparar si dos valores son iguales usamos == (dos signos igual). Más adelante veremos que = (un solo igual) sirve para otra cosa: asignar valores.
3.4 Operadores lógicos (anticipo)
Podemos combinar comparaciones usando operadores lógicos:
¿Para qué sirven estas comparaciones?
En la Semana 04, usaremos estos operadores para filtrar datos. Por ejemplo: “mostrar solo clientes con ventas > 1000 y región == ‘Norte’”. Por ahora, solo necesitamos saber que existen y cómo funcionan básicamente.
4 Tipos de datos
En R existen diferentes tipos de datos. Los tres más comunes son: numérico, carácter y lógico.
4.1 Numérico
Representa números (enteros o decimales):
4.2 Carácter (texto)
Representa texto. Siempre va entre comillas " " o ' ':
Cuidado con las comillas
100 (sin comillas) es un número que puede sumarse, multiplicarse, etc.
"100" (con comillas) es texto que R no puede usar en operaciones matemáticas.
Este es un error común al importar datos desde Excel o CSV.
4.3 Lógico
Solo dos valores posibles: TRUE o FALSE (en mayúsculas, sin comillas):
Los valores lógicos resultan de comparaciones:
4.4 Valores especiales
R tiene algunos valores especiales que encontraremos frecuentemente:
¿Cuál es la diferencia entre NA y NULL?
- NA significa “dato faltante”: había un espacio para un valor, pero no lo conocemos. Ejemplo: un cliente no reportó su edad.
- NULL significa “inexistente”: no hay ni siquiera un espacio. Ejemplo: todavía no hemos creado esa variable.
Por ahora, solo necesitamos reconocer NA porque es muy común en bases de datos reales.
Hasta aquí hemos visto: Podemos usar R como calculadora y obtener resultados inmediatos, pero estos resultados no se guardan. En la siguiente sección aprenderemos a guardar información para reutilizarla.
5 Objetos y asignación
5.1 R es orientado a objetos (OOP)
Concepto fundamental: Todo es un objeto
En R, absolutamente todo es un objeto: - Un número es un objeto - Una tabla de datos es un objeto - Un gráfico es un objeto - Un modelo estadístico es un objeto - Incluso una función es un objeto
Esta filosofía nos permite trabajar con múltiples elementos simultáneamente sin preocuparnos por “guardar y cargar” constantemente (como en Excel o Stata).
Ventaja práctica: Podemos tener abiertas varias tablas de datos al mismo tiempo, crear múltiples gráficos, y guardar resultados de diferentes modelos, todo en la misma sesión.
5.2 ¿Qué es un objeto?
Un objeto es un nombre que almacena información en la memoria de R. Es como una etiqueta que le ponemos a algo para poder referirnos a ello después.
Analogía: Si calculamos 10 + 5, el resultado 15 aparece en la consola pero desaparece inmediatamente. Si queremos usar ese 15 más tarde (por ejemplo, para multiplicarlo por 2), necesitamos “guardarlo” con un nombre. Eso es un objeto.
5.3 Crear objetos: Asignación con <-
Para crear un objeto usamos el operador de asignación <-:
Estructura general:
nombre_objeto <- valor_o_resultado¿Qué pasó? 1. R calculó el valor 15000 2. Lo guardó en memoria con el nombre ventas_enero 3. El objeto aparece en el panel Environment 4. Ahora podemos usar ese nombre en lugar de escribir 15000 cada vez
5.4 Más ejemplos de asignación
¿Cuándo crear objetos?
Cree un objeto cuando: - Va a reutilizar un valor varias veces - Quiere documentar qué representa un número (mejor tasa_descuento que 0.15) - Necesita guardar resultados intermedios de un análisis - Quiere comparar o combinar diferentes cálculos
No es necesario crear objetos para cálculos únicos y simples.
5.5 ¿<- o =?
Ambos funcionan para asignar objetos, pero tienen diferencias sutiles:
Recomendación del curso
Use <- para asignar objetos:
resultado <- mean(ventas)Reserve = para argumentos dentro de funciones:
mean(ventas, na.rm = TRUE)Esto hace el código más legible y sigue la convención estándar de la comunidad R.
Atajo de teclado: Alt + - (Windows/Linux) o Option + - (Mac) escribe <- automáticamente.
5.6 Reglas para nombrar objetos
Reglas obligatorias: - Debe empezar con letra (no con número) - Puede contener letras, números, . y _ - NO puede contener espacios - Es sensible a mayúsculas (ventas ≠ Ventas)
Buenas prácticas de nomenclatura
Use nombres descriptivos:
# Mal
x <- 1500
v <- 2000
# Bien
precio_unitario <- 1500
volumen_ventas <- 2000Sea consistente en el estilo:
# snake_case (recomendado para este curso)
ventas_anuales
precio_promedio
# camelCase (también válido)
ventasAnuales
precioPromedio
# Use uno u otro consistentementeEvite nombres que puedan confundirse con funciones:
# Evitar
mean <- 50 # 'mean' es una función importante
data <- datos # 'data' es una función de R5.7 Mini-ejercicio: Creando objetos
Revise el panel Environment: Debería ver cuatro objetos creados (precio_base, impuesto, precio_final, precio_con_descuento).
6 Clase, tipo y estructura
Ahora que sabemos crear objetos, necesitamos herramientas para inspeccionar qué contienen. R provee tres funciones “lupa”:
6.1 class(): ¿Qué tipo de objeto es?
La clase indica cómo R interpreta ese objeto (número, texto, lógico, tabla de datos, etc.).
6.2 typeof(): ¿Cómo lo almacena internamente?
El tipo es más técnico y detalla cómo R guarda ese dato en memoria. Para nuestros propósitos, class() es más útil.
6.3 str(): Muestra la estructura completa
str() es especialmente útil para objetos complejos (vectores, tablas) que veremos pronto.
Las tres lupas en acción
Estas funciones nos ayudan a entender “qué es” un objeto antes de intentar trabajar con él. Muy útil cuando: - Importamos datos y queremos verificar si se leyeron correctamente - Recibimos un error y necesitamos entender qué tipo de objeto estamos usando - Queremos asegurarnos de que un cálculo produjo el tipo de resultado esperado
7 Environment: Gestión del espacio de trabajo
El panel Environment muestra todos los objetos que existen actualmente en la memoria de R. Aprendamos a gestionarlo.
7.1 Listar objetos: ls()
Esta función es útil cuando tenemos muchos objetos y queremos verificar qué existe.
7.2 Eliminar objetos: rm()
El objeto costos ya no existe. Si intentamos usarlo, R dará error.
7.3 Mantener el entorno limpio
Por qué importa un Environment limpio
Un entorno desordenado puede causar: - Confusión sobre qué objetos están disponibles - Errores al usar versiones viejas de objetos - Uso excesivo de memoria
Buenas prácticas: 1. Elimine objetos intermedios que ya no necesita 2. Use nombres descriptivos para identificar objetos rápidamente 3. Al cerrar RStudio, elija “No” cuando pregunte si quiere guardar el workspace (.RData)
Filosofía del curso: Es mejor ejecutar el script completo desde cero cada vez (reproducibilidad) que depender de objetos guardados de sesiones anteriores.
7.4 Ver tamaño de objetos
Esto es útil cuando trabajamos con bases de datos grandes y queremos optimizar memoria.
8 ¿Qué puede pasar en la consola?
Cuando ejecutamos código, R nos responde de diferentes formas en la consola. Aprender a interpretar estos mensajes es fundamental para trabajar eficientemente.
8.1 Output normal (resultado esperado)
Si todo funciona correctamente, R simplemente muestra el resultado:
La notación [1] indica que estamos viendo el elemento número 1 del resultado. Si el resultado tuviera muchos elementos, veríamos [1], [10], [20], etc., indicando la posición.
8.2 Warning (advertencia)
Un warning NO detiene la ejecución del código, pero nos alerta que algo inesperado ocurrió.
Ejemplo controlado:
R nos advierte que generó NaN (Not a Number) porque matemáticamente no podemos calcular el logaritmo de un número negativo. Pero el código se ejecutó hasta el final.
Otro ejemplo común:
El resultado es NA porque hay un dato faltante. R nos advierte pero no da error. Para solucionarlo:
¿Qué hacer cuando veo un warning?
- Lea el mensaje completo (no lo ignore automáticamente)
- Revise el resultado: ¿tiene sentido o es
NA/NaN? - Ajuste el código si es necesario (como agregar
na.rm = TRUE)
Los warnings son “alertas amarillas”: R pudo ejecutar, pero quiere que verifiquemos si el resultado es el esperado.
8.3 Error (fallo que detiene ejecución)
Un error detiene completamente la ejecución. R no puede continuar.
Ejemplo 1: Objeto inexistente
Mensaje: Error: object 'mi_dato_inexistente' not found
Interpretación: R buscó un objeto con ese nombre en el Environment y no lo encontró. Posibles causas: - Olvidamos crear el objeto - Escribimos mal el nombre - Lo creamos pero luego lo eliminamos
Ejemplo 2: Argumento mal escrito
Mensaje: Error in mean.default(...) : unused argument (naa.rm = TRUE)
Interpretación: R no reconoce el argumento naa.rm. El argumento correcto es na.rm (sin doble ‘a’).
¿Qué hacer cuando veo un error?
- No entre en pánico: Los errores son normales, incluso para programadores expertos
- Lea el mensaje completo: Usualmente indica qué salió mal
- Revise ortografía: Nombres de objetos, funciones y argumentos son sensibles a mayúsculas y espacios
- Verifique el Environment: ¿El objeto que intenta usar realmente existe?
- Use
?nombre_funcionpara verificar argumentos correctos
La habilidad de leer y entender errores es más importante que memorizar sintaxis perfecta.
8.4 Mini-ejercicio: Identificando mensajes
Ejecute estos tres códigos y clasifique cada resultado como “output normal”, “warning” o “error”:
Respuestas esperadas:
- Caso 1: Output normal (resultado: 60)
- Caso 2: Warning (genera NaN por raíz cuadrada de número negativo)
- Caso 3: Error (objeto no existe)
Si puede distinguir estos tres casos, ya tiene la habilidad clave para depurar código y trabajar eficientemente con R.
9 Funciones y sistema de ayuda
En R, prácticamente todo es una función. Incluso operaciones simples como + o <- son funciones internamente. Entender cómo funcionan las funciones y cómo consultar su documentación es esencial.
9.1 Anatomía de una función
Una función tiene tres componentes:
- Nombre: identifica qué hace (
mean,sum,seq) - Argumentos: valores que recibe como input (van entre paréntesis)
- Resultado: output que devuelve después de ejecutarse
Estructura general:
nombre_funcion(argumento1 = valor1, argumento2 = valor2, ...)9.2 Funciones básicas comunes
Todo en R es función
Incluso operaciones que parecen simples son funciones internamente:
No necesitamos escribir así normalmente, pero ayuda entender que R trata todo consistentemente como funciones.
9.3 Sistema de ayuda: Consultando documentación
Para saber qué hace una función y qué argumentos acepta, usamos ? o help():
La documentación se abre en el panel Help y tiene esta estructura:
Description: ¿Qué hace la función? (resumen en una línea)
Usage: Sintaxis general (cómo se escribe)
Arguments: Qué valores recibe y qué significa cada uno
Details: Explicación más técnica (opcional, para profundizar)
Value: Qué devuelve la función
Examples: Ejemplos prácticos (¡LA SECCIÓN MÁS ÚTIL!)
Cómo leer la ayuda eficientemente
Cuando consulte la ayuda de una función por primera vez:
- Lea la sección Description (¿hace lo que necesito?)
- Vaya directo a Examples (copie y ejecute un ejemplo)
- Regrese a Arguments solo cuando necesite ajustar algo específico
La mayoría de usuarios (incluso expertos) aprenden más de los ejemplos que de las explicaciones técnicas.
9.4 Ejecutar ejemplos automáticamente
R permite ejecutar todos los ejemplos de una función automáticamente:
Esto ejecuta cada ejemplo paso a paso, mostrando el código y su resultado.
9.5 Buena práctica: Copiar y adaptar ejemplos
La forma más efectiva de aprender una función nueva:
- Consulte
?nombre_funcion - Vaya a la sección Examples
- Copie un ejemplo a su script
- Modifíquelo paso a paso con sus datos
- Experimente cambiando argumentos
Ejemplo práctico:
No necesita memorizar funciones
Es imposible (e innecesario) memorizar todas las funciones y sus argumentos. Lo importante es: - Saber que existen herramientas para cada tarea - Saber cómo consultar la documentación - Practicar copiando y adaptando ejemplos
Con el tiempo, las funciones más usadas se memorizan naturalmente.
10 Paquetes y librerías
R viene con funciones básicas incluidas (base R), pero podemos expandir sus capacidades instalando paquetes (también llamados librerías).
10.1 ¿Qué es un paquete?
Un paquete es un conjunto de funciones especializadas en tareas específicas. Por ejemplo:
dplyr: manipulación de datos (filtrar, resumir, transformar)ggplot2: creación de gráficos profesionalesreadxl: importar archivos Excel
Actualmente existen más de 20,000 paquetes disponibles en el CRAN (repositorio oficial de R).
10.2 Dos pasos: Instalar vs. Cargar
Diferencia fundamental
| Acción | Comando | Frecuencia | Analogía |
|---|---|---|---|
| Instalar | install.packages("nombre") |
Una sola vez en tu computadora | Comprar un libro y guardarlo en tu estante |
| Cargar | library(nombre) |
Cada vez que inicias R | Sacar el libro del estante para leerlo |
10.2.1 Instalar un paquete (una vez)
# Instalar dplyr
install.packages("dplyr")
# Instalar varios paquetes
install.packages(c("dplyr", "ggplot2", "readxl"))Este comando descarga el paquete desde internet y lo guarda en tu computadora. Solo necesitas hacerlo una vez (a menos que quieras actualizar a una nueva versión).
10.2.2 Cargar un paquete (cada sesión)
Cada vez que abres RStudio, debes cargar los paquetes que necesitarás en esa sesión.
Error común: Intentar usar un paquete sin cargarlo
# Si no cargamos dplyr primero
filter(datos, edad > 25)
# Error: could not find function "filter"
# Solución: cargar el paquete
library(dplyr)
filter(datos, edad > 25) # Ahora funciona10.3 Atajo: pacman para gestión simplificada
El paquete pacman simplifica la gestión de librerías:
# Instalar pacman (solo una vez)
install.packages("pacman")
# Usar p_load para cargar (e instalar automáticamente si no existe)
pacman::p_load(dplyr, ggplot2, readxl)La ventaja de p_load(): si un paquete no está instalado, lo instala automáticamente antes de cargarlo.
Práctica estándar para este curso
Al inicio de cada script, incluiremos:
# Gestión de paquetes
pacman::p_load(dplyr, ggplot2, tidyr, readxl)Esto asegura que todos tengan los paquetes necesarios sin preocuparse por instalarlos manualmente.
10.4 Ver paquetes cargados
Esto muestra la versión de R, paquetes activos, y otra información técnica de la sesión.
11 Vectores
Un vector es la estructura de datos más simple en R. Es fundamental entenderlo porque casi todo en R es un vector o está construido a partir de vectores.
11.1 Concepto: Estructura homogénea
Características de un vector
- Homogéneo: Todos los elementos deben ser del mismo tipo (numérico, carácter o lógico)
- Una dimensión: Solo filas O solo columnas (no ambas)
- Ordenado: Los elementos tienen posición (1, 2, 3…)
11.2 Crear vectores: función c()
La función c() (concatenate) une elementos en un vector:
Revise el Environment: Debería ver tres objetos nuevos.
11.3 Secuencias regulares
Para crear vectores con patrones, usamos atajos:
11.4 Indexación: Acceder a elementos
R indexa desde 1 (no desde 0 como Python o JavaScript):
Indexación con condiciones lógicas
Podemos seleccionar elementos que cumplan una condición:
Esta técnica será fundamental cuando trabajemos con filtros en dplyr (Semana 04).
11.5 Reemplazar valores
11.6 Funciones útiles para vectores
11.7 Mini-ejercicio: Análisis de ventas semanales
Conexión con análisis de datos
Aunque los vectores parecen simples, son fundamentales porque: - Las columnas de una tabla de datos (data frame) son vectores - Las operaciones en dplyr trabajan sobre vectores - Los gráficos en ggplot2 se construyen mapeando vectores
Por eso es importante entender cómo funcionan ahora.
12 Data frames
Los data frames son LA estructura central para análisis de datos en R. Son el equivalente a una tabla de Excel o una hoja de cálculo.
12.1 Concepto: Tabla = Data frame
Características de un data frame
- Heterogéneo: Cada columna puede ser de un tipo diferente (numérica, carácter, lógica)
- Dos dimensiones: Filas (observaciones) y columnas (variables)
- Estructura rectangular: Todas las columnas tienen la misma longitud
- Columnas con nombre: Cada variable tiene un nombre único
Analogía: Un data frame es como una tabla de Excel donde: - Cada fila es una observación/registro (por ejemplo, un cliente) - Cada columna es una variable (por ejemplo, edad, ventas, región)
12.2 Crear un data frame
Nota: Cada columna es un vector del mismo largo. Si intentamos crear columnas de diferente longitud, R dará error.
12.3 Inspeccionar un data frame
Interpretación de str()
Qué nos dice: - 'data.frame': 4 obs. of 4 variables → 4 filas (observaciones), 4 columnas (variables) - $ nombre: chr → columna “nombre” es de tipo carácter - $ edad: num → columna “edad” es numérica - $ ventas: num → columna “ventas” es numérica - $ activo: logi → columna “activo” es lógica
Esta función es su “radiografía” rápida de cualquier tabla de datos.
12.4 Acceder a columnas con $
Nota: Cuando extraemos una columna con $, obtenemos un vector.
12.5 Acceder a celdas con [fila, columna]
Cuidado con el orden: siempre [fila, columna]
# Correcto: fila primero, columna después
clientes[2, 3] # Fila 2, columna 3
# Incorrecto (orden invertido)
clientes[3, 2] # Esto da un resultado diferenteTruco para recordar: Piense en RC (fila Row, columna Column) en orden alfabético.
12.6 Agregar columnas
12.7 Data frames precargados en R
R incluye varios data frames para practicar:
12.8 Mini-ejercicio: Análisis de clientes
Esto es la base para el resto del curso
Los data frames son fundamentales porque:
Semana 04 (dplyr): Aprenderemos funciones especializadas para manipular data frames: - filter(): Filtrar filas (en lugar de data[condicion, ]) - select(): Seleccionar columnas (en lugar de data$columna) - mutate(): Crear columnas nuevas (en lugar de data$nueva <- ...) - summarize(): Calcular resúmenes (promedios, totales, etc.)
Semana 05 (ggplot2): Visualizaremos data frames con gráficos profesionales
Semana 06: Importaremos data frames desde Excel, CSV, bases de datos
Semanas 09-16: Usaremos data frames para entrenar modelos de machine learning
Por ahora, lo importante es entender: - Qué es un data frame (tabla con filas/columnas) - Cómo acceder a sus elementos ($ para columnas, [,] para celdas) - Cómo crear data frames simples
Lo demás lo construiremos gradualmente.