Saltar al contenido

Creación de funciones anidadas y con fines especiales en R

Las funciones son importantes porque reducen sustancialmente la repetición en el código. Esto disminuye la posibilidad de errores en el código, reduciendo así la carga de trabajo. La otra ventaja es que si se escribe correctamente, las funciones pueden ser reproducidas por otros usuarios. Entenderemos esto mejor con una ilustración como la que se discute a continuación.

Datos

Para comprender la importancia de las funciones, y también para las demás secciones de la presente guía, utilizaremos un conjunto de datos ficticios de solicitantes de préstamos que contiene 600 observaciones y diez variables, como se describe a continuación:

Creación de funciones anidadas y con fines especiales en R
Creación de funciones anidadas y con fines especiales en R
  1. Estado civil: Si el solicitante está casado («Sí») o no («No»)
  2. Es_graduado: Si el solicitante es un graduado («Sí») o no («No»)
  3. Ingresos: Ingresos anuales del solicitante (en USD)
  4. Cantidad de préstamo: Monto del préstamo (en USD) para el que se presentó la solicitud
  5. Puntaje de crédito: Si el puntaje de crédito del solicitante es bueno («Bueno») o no («Malo»)
  6. Estado_de_aprobación: Si la solicitud de préstamo fue aprobada («Sí») o no («No»)
  7. Edad: La edad del solicitante en años
  8. Sexo: Si el solicitante es un hombre («M») o una mujer («F»)
  9. Inversión: Inversión total en acciones y fondos de inversión (en USD) según lo declarado por el solicitante
  10. Propósito: Propósito de solicitar el préstamo

Empecemos por cargar las bibliotecas necesarias y los datos.

123456789library(plyr)library(readr)library(dplyr)library(ggplot2)library(repr)df1 <- read_csv("data.csv")df2 = df1glimpse(df1)

{r}

Salida:

123456789101112Observaciones: 600Variables: 10$ Marital_status <chr ]; "Sí", "No", "Sí", "No", "Sí", "Sí", "Sí", ...$ Is_graduado <chr ]; "No", "Sí", "Sí", "Sí", "Sí", "Sí", "Sí", "Sí",... ...$ Ingreso $; 30000, 30000, 30000, 30000, 89900, 133300, 136700, 136...$ Cantidad_de_préstamo $; 60000, 90000, 90000, 90000, 80910, 119970, 123030, 123...$ Puntuación_de_crédito $; "Satisfactorio", "Satisfactorio", "Satis. ..$ approval_status <chr ]; "Sí", "Sí", "No", "No", "Sí", "No", "Sí", "Sí", "... ...$ edad <int;²; 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33...$ sexo <²; "F", "F", "M", "F", "M", "M", "M", "F", "F", "M",. ...$ Inversión...; 21000, 21000, 21000, 21000, 62930, 93310, 95690, 95690... $ Propósito...; "Educación", "Viaje", "Otros", "Otros", "Viaje", "...

La salida muestra que el conjunto de datos tiene cinco variables numéricas (etiquetadas como int) y cinco variables de caracteres (etiquetadas como chr). Para construir los algoritmos de aprendizaje de la máquina, convertiremos el chr en variables factoriales usando las líneas de código de abajo.

12345678910111213df1$Estado_marital = as.factor(df1$Estado_marital)df1$Is_graduado = as.factor(df1$Is_graduado)df1$Puntuación_crédito = as. factor(df1$Puntuación_crédito)df1$Estado_de_aprobación = as.factor(df1$Estado_de_aprobación)df1$Sexo = as.factor(df1$Sexo)df1$Propósito = as.factor(df1$Propósito)vislumbre(df1)

{r}

Salida:

123456789101112Observaciones: 600Variables: 10$ Estado_marital <fct.; Sí, No, Sí, No, Sí, Sí, Sí, Sí, No, No... $ Ingreso <int.; 30000, 30000, 30000, 30000, 89900, 133300, 136700, 136...$ Monto_de_préstamo <int.; 60000, 90000, 90000, 90000, 80910, 119970, 123030, 123...$ Puntaje_de_crédito <fct. ..$ Estado_de_aprobación <fct.; Sí, Sí, No, No, Sí, Sí, Sí, No, No, No, ...$ Edad <int.; 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33...$ Sexo <fct. ...$ Inversión...; 21000, 21000, 21000, 21000, 62930, 93310, 95690, 95690...$ Propósito...; Educación, Viajes, Otros, Otros, Viajes, Viajes, Tra...

El resultado muestra que las variables se han convertido en variables factoriales. Es interesante ver que se necesitaron seis líneas de código para realizar la conversión. Podemos hacer la misma operación con sólo dos líneas de código, como se muestra a continuación. La primera línea especifica la posición de las columnas que deben ser cambiadas a variables factoriales, mientras que la segunda línea hace la conversión usando la función lapply().

123nombres(c(1,2,5,6,8,10)df2[,nombres] <- lapply(df2[,nombres] , factor)glimpse(df2)

{r}

Salida:

123456789101112Observaciones: 600Variables: 10$ Estado_marital <fct.; Sí, No, Sí, No, Sí, Sí, Sí, Sí, No, No... $ Ingreso <int.; 30000, 30000, 30000, 30000, 89900, 133300, 136700, 136...$ Monto_de_préstamo <int.; 60000, 90000, 90000, 90000, 80910, 119970, 123030, 123...$ Puntaje_de_crédito <fct. ..$ Estado_de_aprobación <fct.; Sí, Sí, No, No, Sí, Sí, Sí, No, No, No, ...$ Edad <int.; 25, 29, 27, 33, 29, 25, 29, 27, 33, 29, 25, 29, 27, 33...$ Sexo <fct. ...$ Inversión...; 21000, 21000, 21000, 21000, 62930, 93310, 95690, 95690...$ Propósito...; Educación, Viajes, Otros, Otros, Viajes, Viajes, Tra...

La salida anterior confirma que con sólo dos líneas de código y utilizando la función lapply(), podemos realizar una operación que inicialmente requería seis líneas de código. También eliminó las posibilidades de error manual e hizo el código más robusto. Esto fue para un pequeño conjunto de datos que contenía diez variables. Para conjuntos de datos más grandes con millones de observaciones y miles de variables, el uso de funciones se vuelve absolutamente vital.

Habiendo entendido la importancia de las funciones, ahora nos sumergimos más profundamente en las diversas opciones disponibles en R.