---
title: Practica - Programación Funcional 
subtitle: Herramientas de programación para la producción y difusión de estadísticas socioeconómicas - ASET
output:
  html_notebook:
    toc: yes
    toc_float: yes
date: ""
---

```{r setup,include=FALSE, eval = FALSE}
knitr::opts_chunk$set(include = F, eval = F)
```

## estructuras condicionales

-   Utilizar el paqete EPH para importar la base de datos del 4to trimestre de 2023.\
-   Diseñar una estructura de código condicional que chequeé si la base importada contiene más de 40.000 registros e imprima un aviso (función `print()`) que aclare que la base fue importada correctamente y nos muestre **la cantidad de casos.**

```{r, eval=FALSE}
library(tidyverse)
library(eph)
base <- eph::get_microdata(year = 2023,period = 4)
base_hogar <- eph::get_microdata(year = 2023,period = 4,type = "hogar")
```

```{r}
if (nrow(base)>40000) {
  print(
    paste0("Base importada corrctamente! Cantidad de casos: ", nrow(base)))
}
```

-   Diseñar una estructura de código condicional que evalue la cantidad de casos de la base de datos:
    -   Si los casos en la base de datos son más de 40.000, imprima el texto "Estás trabajando con la base individual"
    -   Si los casos en la base de datos son menos de 40.000, imprima otro aviso "

```{r}
if (nrow(base)>40000) {
 print("Estás trabajando con la base individual")
} else{
  print("Chequear cantidad de casos. ¿Importaste la base base individual?")
}
```

## definición de funciones

Crear una **función** llamada *Saludo* que tenga un parámetro para pasarle un nombre, y que al ejecutarla imprima un texto con algún saludo hacia esa persona

```{r}
Saludo <- function(tu_nombre){
  print(paste0("Hola, ",tu_nombre,". Todo tranquilo, che?"))
}

Saludo(tu_nombre = "Guido")
```

Crear una **función** que devuelva la sumatoria de los números enteros comprendidos entre 1 y un parámetro *x* a definir.

```{r}
sumatoria_enteros <- function(x){
sum(1:x)
  }

sumatoria_enteros(x = 10)
```

Modificar la **función** anterior para que brinde un mensaje de error claro en caso de que al utilizarla se especifique un valor no numérico.

```{r,error=TRUE}
sumatoria_enteros_correc <- function(x){
assertthat::assert_that(is.numeric(x),
                        msg = "Ingresa un valor numérico")
  sum(1:x)
  }

sumatoria_enteros_correc(x = "a")
```

Crear una función llamada `estandariza_vector` que, dado un parámetro denominado `vector_num`:

-   Imprima en consola (`print()`) un texto que me muestre los siguientes datos:
    -   la media del vector
    -   el máximo valor del vector
    -   el minimo valor del vector
    -   el desvío estándar del vector (función `sd()`)\
-   Devuelva (`return()`) el vector estandarizado (Esto es, a cada elemento del vector restarle la media y dividirlo por el desvío estándar)

```{r}
estandariza_vector <- function(vector_num){

     media <- mean(vector_num)
     maximo <- max(vector_num)
     minimo <- min(vector_num)
     desvio <- sd(vector_num)
     print(paste0("La media del vector era: ",media))
     print(paste0("El máximo valor del vector era: ",maximo))
     print(paste0("El mínimo del vector era: ",minimo))
     print(paste0("El desvio estándar era: ",desvio))
    
     vector_estandarizado <- (vector_num-media)/desvio
     return(vector_estandarizado)
  }

vec_stand <- estandariza_vector(c(19,990,223,420,3,4))
```

```{r}
vec_stand
```

## loops

-   A partir del gráfico de histograma sencillo utilizado en clase: diseñar un loop que imprima un gráfico por cada región con la distribución de edades

```{r}
regiones <- openxlsx::read.xlsx("bases/diccionario_aglos_regiones.xlsx",sheet = 1)

base_regiones <- base %>% 
  left_join(regiones)

for(i in unique(base_regiones$Region)){
  
base_filtrada <- base_regiones %>% 
  filter(Region == i)
 
hist(x = base_filtrada$CH06,
     main = i,
     xlab = "Edad",
     xlim = c(0,100))

    
}
```

-   Diseñar un loop que nos permita exportar un excel con las siguientes caracteristicas

    -   Debemos crear 1 pestaña por región, nombrada según el nombre de la provincia
    -   Cada pestaña debe tener un título que diga "Tasas básicas por sexo - Región ..." (con la región en cuestión)
    -   Luego, debe visualizarse un cuadro que muestre la tasa de empleo, actividad y desempleo por sexo y por región

    ```{r}
    tasas_regiones <-   base_regiones %>%
        group_by(Region,CH04) %>% 
        summarise(poblacion = sum(PONDERA),
                  ocupados = sum(PONDERA[ESTADO == 1]),
                  desocupados = sum(PONDERA[ESTADO == 2]),
                  pea = ocupados+desocupados,
                  tasa_activ = pea/poblacion,
                  tasa_empleo = ocupados/poblacion,
                  tasa_desocup = desocupados/pea
                  ) %>% 
      ungroup()
    nombres_regiones <- unique(tasas_regiones$Region)

    wb <- createWorkbook() # CREAR OBJETO TIPO WORKBOOK 

    for(i in nombres_regiones){
      
    base_1_reg <-  tasas_regiones %>% 
        filter(Region == i)
     
    addWorksheet(wb,sheetName =  i) # AGREGAR UNA PESTAÑA

    writeData(wb,
              sheet=i,
              x = paste0("Tasas básicas por sexo - Región ",i), #Lo uso para crear un titulo
              startRow = 1)


    writeData(wb,
              sheet=i,
              x = base_1_reg,   #Acá va la base de datos
              startRow = 3) #Dejo un espacio entre titulo y datos


     
    }


    saveWorkbook(wb, "Resultados/tasas_regiones.xlsx") ## EXPORTACION FINAL

    ```
