Unidad 1 - Práctica: tu primer script en R

Aplicación guiada en clase · Semana 3 · 06278-ECO

Autor/a

PhD. Eduard F. Martínez-González

1 Reglas de juego

Esta sesión asume que ya estudiaste la teoría

Aquí no volvemos a explicar qué es un objeto, un vector o un data frame: eso quedó en el video (y su versión escrita interactiva) y en el quiz. Hoy esos conceptos se usan — vas a escribir, ejecutar y depurar tu primer script real. Si un término se te escapa, el glosario queda a un clic.

Lo que necesitas ahora mismo:

  • 💻 RStudio instalado y funcionando (lo pedía la teoría). ¿No alcanzaste? Plan B mientras lo resuelves: posit.cloud corre RStudio en el navegador.
  • 🧑‍🤝‍🧑 Un compañero: esta práctica se trabaja en parejas — un computador escribe, el otro lee los resultados y cuestiona; cambien de rol en cada sección.

El plan de hoy: primero le hablas a R por la consola, luego mueves esa conversación a un script (la diferencia lo es todo); creas objetos y aprendes a vigilarlos en el Environment; construyes tu primer vector y tu primera tabla con preguntas de negocio; rompes cosas a propósito para perderle el miedo a los errores; cargas tu primera librería; y cierras creando el proyecto que usarás todo el semestre.

2 La consola: hola, R ≈ 10 min

Abre RStudio. Ubica la consola (panel izquierdo/inferior izquierdo, el del símbolo >). Escribe estas tres órdenes, una por una, presionando Enter después de cada una:

# 1. El precio final de un producto de $48.000 con IVA del 19%
48000 * 1.19

# 2. ¿Cuánto creció una tienda que pasó de vender 34 a 41 millones? (en %)
(41 - 34) / 34 * 100

# 3. ¿Ese crecimiento superó la meta del 15%?
(41 - 34) / 34 * 100 > 15

Checkpoint 🎯: debes ver 57120, 20.58824 y TRUE. Fíjate en la tercera: le hiciste a R una pregunta de negocio y respondió con un lógico.

Ahora la parte incómoda, a propósito: presiona la flecha arriba en la consola. R te muestra el último comando. Así se navega el historial… pero imagina reconstruir un análisis de 50 pasos a punta de flechita. Por eso existe el script.

3 El script: tu análisis con memoria ≈ 10 min

Crea tu primer script: File → New File → R Script (o Ctrl/Cmd + Shift + N). Se abre el panel Source, arriba de la consola. Escribe esto (¡escríbelo, no lo pegues! — hoy las manos aprenden):

## ============================================
## Práctica semana 3 — Mi primer script
## Nombres: _______________ y _______________
## Fecha: _______________
## ============================================

##=== 1. R como calculadora ===##

# Precio con IVA
48000 * 1.19

# Crecimiento de la tienda (%)
(41 - 34) / 34 * 100

Ahora ejecuta línea por línea: deja el cursor sobre una línea y presiona Ctrl + Enter (Windows) o Cmd + Enter (Mac). Mira cómo cada línea “viaja” a la consola y deja su resultado.

Guarda el archivo (Ctrl/Cmd + S) como practica_semana3.R — por ahora en el Escritorio; al final de la clase le daremos un mejor hogar.

La regla que empieza hoy y no se negocia

Todo lo que valga la pena conservar se escribe en el script y se ejecuta con Ctrl/Cmd + Enter. La consola es para probar y descartar. Un buen analista puede borrar su Environment completo, correr su script de arriba a abajo, y llegar exactamente al mismo resultado — esa es la prueba de fuego de la reproducibilidad.

Nota los comentarios (#): R los ignora, tu compañero no. Desde hoy, cada bloque de tu script lleva un comentario que dice qué hace y, cuando no sea obvio, por qué.

4 Objetos bajo vigilancia ≈ 12 min

Agrega una sección nueva a tu script y ejecútala línea por línea. Después de cada asignación, mira el panel Environment (arriba a la derecha): vas a ver aparecer cada objeto con su valor.

##=== 2. Objetos ===##

# El negocio: una tienda de accesorios
precio_sin_iva <- 48000
tasa_iva       <- 0.19
unidades_mes   <- 350

# Objetos construidos con otros objetos
precio_final <- precio_sin_iva * (1 + tasa_iva)
ingreso_mes  <- precio_final * unidades_mes

# ¿Cuánto vendimos en el mes?
ingreso_mes

Checkpoint 🎯: el Environment debe mostrar 5 objetos y ingreso_mes debe ser 19992000 (casi 20 millones).

Ahora radiografía lo que creaste:

# Las lupas de la teoría, aplicadas
class(precio_final)
class(precio_final > 50000)
str(ingreso_mes)

Ahora ustedes 🧑‍🤝‍🧑: sin borrar nada, agreguen un objeto costo_unitario de 31000 y calculen margen_mes (ingreso del mes menos costo de las 350 unidades). ¿Da positivo el negocio? (Respuesta esperada: 9.142.000 — si les dio negativo, revisen el orden de las operaciones.)

El reflejo que estás entrenando: escribir → ejecutar → mirar la consolamirar el Environment. Cuatro pasos, siempre. Si el objeto no apareció o el número no cuadra, se corrige antes de seguir — los errores en cadena nacen de no revisar a tiempo.

5 Tu primer vector con preguntas de negocio ≈ 15 min

La tienda te pasa sus ventas diarias de la semana pasada. Agrégalas a tu script:

##=== 3. Vectores ===##

# Ventas de lunes a domingo (miles de pesos)
ventas_dia <- c(1200, 1500, 1100, 1800, 2000, 1300, 1700)

# Radiografía rápida
length(ventas_dia)

Y ahora respóndele al dueño, línea por línea:

# a) ¿Cuánto vendimos en la semana?
sum(ventas_dia)

# b) ¿Cuál fue el promedio diario?
mean(ventas_dia)

# c) ¿Cuál fue el mejor día? (posición 1 = lunes ... 7 = domingo)
which.max(ventas_dia)

# d) ¿Qué días superaron el promedio? (indexación lógica)
ventas_dia[ventas_dia > mean(ventas_dia)]

# e) ¿CUÁNTOS días superaron el promedio?
sum(ventas_dia > mean(ventas_dia))

Checkpoint 🎯: total 10600, promedio 1514.286, mejor día el 5 (viernes), y 3 días por encima del promedio.

Última vuelta: el dueño avisa que el dato del miércoles estaba mal digitado — fueron 1400, no 1100:

# f) Corregir el dato del miércoles (posición 3) y recalcular el total
ventas_dia[3] <- 1400
sum(ventas_dia)

Ahora ustedes 🧑‍🤝‍🧑: ¿el nuevo total superó la meta semanal de 10800? Escriban una sola línea que devuelva TRUE o FALSE. Luego: ¿cuántos días quedaron ahora por encima del promedio recalculado?

6 Tu primera tabla ≈ 15 min

Las ventas por día están bien, pero el negocio real tiene productos. Construye tu primera tabla de tres columnas:

##=== 4. Data frames ===##

inventario <- data.frame(
  producto = c("Audífonos", "Cargador", "Forro", "Cable USB", "Soporte"),
  precio   = c(85000, 32000, 25000, 18000, 41000),
  unidades = c(12, 40, 55, 70, 8)
)

# La radiografía completa, SIEMPRE, apenas nace una tabla
str(inventario)
dim(inventario)
head(inventario)

Checkpoint 🎯: str() debe reportar 5 obs. of 3 variables, con producto como chr y las otras dos como num. En el Environment, inventario aparece en la sección Data — dale clic y RStudio te la muestra como hoja de cálculo (el visor sirve para mirar, no para editar: los cambios se hacen con código).

Ahora explótala:

# a) La columna precio es un vector: ¿precio promedio del inventario?
mean(inventario$precio)

# b) ¿Qué productos tienen menos de 20 unidades? (filtro por condición)
inventario[inventario$unidades < 20, ]

# c) Nueva columna: plata invertida en cada producto
inventario$valor_stock <- inventario$precio * inventario$unidades

# d) ¿Qué producto concentra más plata en bodega?
inventario[which.max(inventario$valor_stock), ]

Checkpoint 🎯: el filtro (b) devuelve 2 productos (Audífonos y Soporte); el producto con más valor en stock (d) es el Forro (1.375.000 — mucha unidad barata le gana a poca unidad cara: primera lección de inventarios).

Ahora ustedes 🧑‍🤝‍🧑: respondan con una línea cada una — (1) ¿cuál es el valor total de la bodega?, (2) ¿cuántos productos tienen precio mayor a 30000?, (3) muestren la tabla solo con las filas cuyo valor_stock supere el millón. (Respuestas: 5.263.000 · 3 productos · 4 filas.)

7 Rompe cosas a propósito ≈ 12 min

Un analista que no sabe leer errores depende de la suerte. Vamos a provocarlos en ambiente controlado. Escribe y ejecuta cada caso, lee el mensaje completo en voz alta con tu pareja, y clasifícalo: ¿warning o error?

##=== 5. Laboratorio de errores ===##

# Caso 1: aparece un dato faltante en las ventas
ventas_con_na <- c(1200, 1500, NA, 1800)
mean(ventas_con_na)

¿Qué devolvió? ¿Hubo alerta roja? (No: devolvió NA en silencio — el caso más traicionero.) Arréglalo:

mean(ventas_con_na, na.rm = TRUE)
# Caso 2: pedir un objeto que no existe
ingreso_anual
# Caso 3: el clásico de columnas mal importadas
"48000" + 1000

Para discutir en pareja (30 segundos por caso): ¿en cuál de los tres casos R se detuvo por completo? ¿En cuál corrió pero el resultado no sirve? ¿Cuál mensaje te dice exactamente cómo corregir?

🤖 Momento IA: estrena tu skill

En la práctica pasada construiste el skill Explicador de código R. Úsalo de verdad: pégale a tu asistente el Caso 3 completo — código y mensaje de error — y pídele que explique la causa antes de dar la solución (así lo diseñaste). Luego verifica: ¿la explicación coincide con lo que dice la teoría sobre tipos de datos?

Este es el flujo que usarás todo el semestre: intento → leo el error → consulto (ayuda o IA) → entiendo → corrijo. La IA acelera el paso 3; los pasos 4 y 5 son tuyos.

8 Tu primera librería ≈ 8 min

La próxima semana necesitaremos dplyr y ggplot2. Dejemos todo instalado hoy, que hay tiempo y wifi.

Paso 1 — instalar (en la CONSOLA, no en el script): esto se hace una sola vez por computador.

install.packages("pacman")

Verás mensajes de descarga; espera a que la consola vuelva a mostrar el >.

Paso 2 — cargar (en el SCRIPT): agrega el encabezado estándar del curso y ejecútalo.

##=== 6. Librerías ===##

# El encabezado que llevarán todos nuestros scripts:
require(pacman)
p_load(dplyr, ggplot2)   # carga; y si falta alguno, lo instala solo

Checkpoint 🎯: en el panel Packages (abajo a la derecha), busca dplyr: debe aparecer con el check activado. Ese check es la diferencia entre instalado y cargado, en vivo.

Advertencia

¿install.packages falló? Pasa: red del campus, permisos, antivirus. Respira y aplica el protocolo: lee el mensaje, y pídele el diagnóstico a tu asistente con el error completo. Si no sale en 3 minutos, levanta la mano — que la instalación no se coma la clase.

9 Cierre: el proyecto del semestre ≈ 10 min

Mira tu Environment: está lleno de objetos que morirán al cerrar RStudio. ¿Y tu análisis? Sobrevive, porque vive en el script. Solo falta darle una casa permanente — la que dice la teoría:

  1. File → New Project → New Directory → New Project. Nombre: intro_ba. Ubicación: tu carpeta de la universidad (no Descargas). Clic en Create Project — RStudio se reinicia dentro del proyecto.
  2. En el panel Files, crea tres carpetas con el botón New Folder: data, scripts, output.
  3. Trae tu script: File → Save As… → guárdalo en scripts/ como practica_semana3.R (la copia del Escritorio ya puede morir).
  4. Verifica dónde está parado R:
getwd()

Debe terminar en /intro_ba. Desde hoy, toda ruta que escribas será relativa a esa carpeta: data/archivo.csv, output/grafico.png. Nada de C:/Users/....

Por qué esto importa (la moraleja de toda la sesión)

  • El Environment es memoria de corto plazo: se borra al cerrar.
  • El script es la memoria de largo plazo: reconstruye todo, en orden, con comentarios.
  • El proyecto hace que ese script corra igual en tu portátil, en el del monitor o en el del profesor — porque las rutas son relativas.

Environment + script + proyecto = análisis reproducible. Este trío es, literalmente, la “buena práctica inicial” sobre la que se montará el proyecto final del curso.

Prueba de fuego antes de irte al taller 🧪: con el proyecto abierto, ejecuta rm(list = ls()) en la consola (borra TODO el Environment)… y ahora corre tu script completo de arriba a abajo (botón Source, o Ctrl/Cmd + Shift + Enter). Si al final el Environment se repobló y no hubo errores: felicitaciones, tu primer script es reproducible.


Siguiente parada → el Taller 3: R desde cero, que resolverás individualmente con lo que acabas de practicar. Todo lo que necesitas ya está en tu cabeza, en tu script y en la teoría.