Unidad 1: Cálculo de indicadores simples y transformación de la información
Funciones y Bucles en R & RStudio
Introducción
Aprender a programar en R se vuelve muy sencillo cuando entendemos la lógica detrás de cada herramienta. En esta lección aprenderemos cuatro conceptos fundamentales:
- Funciones personalizadas: Crearemos nuestras propias herramientas.
- Condicional
if: Le enseñaremos a R a tomar decisiones. - Ciclo
for: Repetiremos acciones un número exacto de veces. - Ciclo
while: Repetiremos acciones mientras se cumpla una condición.
Definición de una Función en R
¿Qué es una función?
Imagina una función como una máquina en una fábrica o una receta de cocina:
Entradas (Argumentos): Los insumos que le entregas a la máquina.
Proceso (Cuerpo): Las instrucciones que realiza la máquina con esos insumos.
Salida (Resultado): El producto final que te devuelve.
La Analogía con la Economía (Función Cobb-Douglas): En economía, una Función de Producción (como la Cobb-Douglas \(Y = A \cdot L^\alpha \cdot K^\beta\)) sirve exactamente para ilustrar este concepto: * Le entregas como entradas la cantidad de Trabajo (\(L\)) y Capital (\(K\)). * La máquina procesa estos insumos según el nivel de tecnología (\(A\)). * Te entrega como salida la Producción total (\(Y\)).
Sintaxis Paso a Paso en R
Para construir cualquier función en R, usamos la siguiente estructura básica:
Ejemplo Práctico 1: Área de un Rectángulo
Construyamos una función simple que reciba la base y la
altura y nos devuelva el área:
# Paso 1: Definir la función
calcular_area_rectangulo <- function(base, altura) {
area <- base * altura
return(area)
}
# Paso 2: Usar la función con valores de prueba
area_1 <- calcular_area_rectangulo(base = 5, altura = 3)
cat("El área del rectángulo es:", area_1, "
")## El área del rectángulo es: 15
Ejemplo Práctico 2: Convertidor de Dólares a Millones de Dólares
Si trabajas con cifras presupuestarias grandes, puedes crear una función que transforme montos en dólares a millones de dólares:
# Función para convertir dólares a millones
dolares_a_millones <- function(monto_dolares) {
millones <- monto_dolares / 1000000
return(millones)
}
# Prueba: Convertir $15,500,000 a millones
resultado_millones <- dolares_a_millones(15500000)
cat("Monto en millones:", resultado_millones, "millones USD
")## Monto en millones: 15.5 millones USD
Condicional “if” (Toma de Decisiones)
El condicional if nos permite ejecutar un bloque de
código solo si una condición es verdadera.
La Lógica:
if(Si…): Si se cumple la condición A, haz esto.else if(Si no, pero si…): Si no se cumplió la anterior, pero se cumple B, haz esto.else(De lo contrario…): Si no se cumplió ninguna anterior, haz esto otro.
Ejemplo Práctico: Evaluador de Presupuesto
Evaluemos si un gasto en dólares es considerado (“Alto Presupuesto”, “Presupuesto Moderado” o “Bajo Presupuesto”):
evaluar_presupuesto <- function(monto_dolares) {
millones <- dolares_a_millones(monto_dolares)
if (millones >= 10) {
print("Categoría: Alto Presupuesto (Mayor o igual a 10 millones USD)")
} else if (millones >= 2) {
print("Categoría: Presupuesto Moderado (Entre 2 y 10 millones USD)")
} else {
print("Categoría: Bajo Presupuesto (Menor a 2 millones USD)")
}
}
# Probando la función con diferentes valores
evaluar_presupuesto(15000000)## [1] "Categoría: Alto Presupuesto (Mayor o igual a 10 millones USD)"
## [1] "Categoría: Presupuesto Moderado (Entre 2 y 10 millones USD)"
## [1] "Categoría: Bajo Presupuesto (Menor a 2 millones USD)"
Ciclo (Loop) “for”
El ciclo for nos sirve para repetir una tarea un
número determinado de veces (por ejemplo, para cada elemento de
una lista o para cada mes del año).
Ejemplo Práctico: Convertir las Ventas de los Primeros 6 Meses
Supongamos que tenemos las ventas en dólares para los primeros 6 meses del año y queremos calcular y mostrar la conversión a millones mes por mes:
# Vector con las ventas mensuales en dólares (Enero a Junio)
ventas_mensuales <- c(2000000, 4500000, 12000000, 800000, 3100000, 15000000)
nombres_meses <- c("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio")
# Bucle FOR: Recorre desde el mes 1 hasta el mes 6
for (i in 1:6) {
mes <- nombres_meses[i]
monto <- ventas_mensuales[i]
monto_millones <- dolares_a_millones(monto)
cat("Mes", i, "(", mes, "):", monto_millones, "millones USD
")
}## Mes 1 ( Enero ): 2 millones USD
## Mes 2 ( Febrero ): 4.5 millones USD
## Mes 3 ( Marzo ): 12 millones USD
## Mes 4 ( Abril ): 0.8 millones USD
## Mes 5 ( Mayo ): 3.1 millones USD
## Mes 6 ( Junio ): 15 millones USD
Ciclo (Loop) “while”
El ciclo while repite una acción mientras una
condición siga siendo VERDADERA. Se usa cuando no
sabemos exactamente cuántas veces necesitaremos repetir el
proceso.
Ejemplo Práctico: Ahorro para un Fondo de Reserva
Imagina que quieres reunir un fondo de reserva de $100 dólares. Empiezas con $0 y ahorras $25 dólares cada semana. ¿Cuántas semanas tomará alcanzar la meta?
meta <- 100
ahorro_actual <- 0
ahorro_semanal <- 25
semana <- 0
# Mientras no hayamos alcanzado la meta, seguimos ahorrando
while (ahorro_actual < meta) {
semana <- semana + 1
ahorro_actual <- ahorro_actual + ahorro_semanal
cat("Semana", semana, ": Ahorro acumulado =", ahorro_actual, "USD
")
}## Semana 1 : Ahorro acumulado = 25 USD
## Semana 2 : Ahorro acumulado = 50 USD
## Semana 3 : Ahorro acumulado = 75 USD
## Semana 4 : Ahorro acumulado = 100 USD
##
## ¡Meta alcanzada en 4 semanas!
Aplicación Práctica: Resolución de la Ecuación Cuadrática
Para resolver una ecuación cuadrática de la forma \(a x^2 + b x + c = 0\), aplicamos la fórmula general de la escuela:
\[x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}\]
La parte dentro de la raíz (\(b^2 - 4ac\)) se llama discriminante: * Si es negativo, no existen soluciones reales. * Si es cero o positivo, calculamos \(x_1\) y \(x_2\).
Creación de la función
resolver_cuadratica <- function(a, b, c) {
# 1. Calcular el discriminante
discriminante <- (b^2) - (4 * a * c)
# 2. Tomar decisión con un 'if' sencillo
if (discriminante < 0) {
cat("No tiene soluciones en los números reales.
")
} else {
x1 <- (-b + sqrt(discriminante)) / (2 * a)
x2 <- (-b - sqrt(discriminante)) / (2 * a)
return(c(x1 = x1, x2 = x2))
}
}Resumen
| Estructura | ¿Para qué sirve? | Ejemplo Sencillo |
|---|---|---|
function() |
Crear tu propia herramienta reutilizable | area <- function(b, h) { b * h } |
if / else |
Tomar decisiones lógicas (Si ocurre X…) | if (x > 0) print("Positivo") |
for () |
Repetir un número conocido de veces | for (i in 1:5) print(i) |
while () |
Repetir mientras se cumpla una condición | while (ahorro < 100) ahorro <- ahorro + 10 |