argendatafundar / argendataR

Librería de R para ETL de argendata
Creative Commons Attribution 4.0 International
0 stars 1 forks source link

Agregar función de colector de fuentes "citadas" #16

Open Ignacio-Ibarra opened 3 weeks ago

Ignacio-Ibarra commented 3 weeks ago

La función argendataR::write_output posee varios argumentos, uno de ellos es el argumento fuentes, el cual espera un vector de strings. Cuando la actividad de scripting se vuelve repetitiva es posible incurrir en omisiones y errores. Es por ello que sería util incorporar una función que colecte las fuentes "citadas" con cierto formato.

# Casos correctos
fuente1 <- "R225C97"
fuente2 <- "R226C96"
fuente3 <- "R227C0"

#Casos incorrectos
fuente4 <- data.frame(a = 1:3,
                      b = LETTERS[1:3])
fuente5 <- "R12345C0"

# Variaciones de casos correctos
fuente_fmi <- "R225C97"
fuente_ocde <- "R226C96"
fuente_sisi <- "R227C0"

colectar_fuentes <- function(pattern = "^fuente.*"){

  # Genero un vector de codigos posibles
  posibles_codigos <- c(fuentes_raw()$codigo,fuentes_clean()$codigo)

  # Usar ls() para buscar variables en el entorno global
  variable_names <- ls(pattern = pattern, envir = globalenv())

  # Obtener los valores de esas variables
  valores <- unlist(mget(variable_names, envir = globalenv()))

  # Filtrar aquellas variables que sean de tipo character (string)
  # Esto es para que la comparacion sea posible en la linea de abajo
  strings <- valores[sapply(valores, is.character)]

  # solo devuelvo las fuentes que existen
  return(valores[valores %in% posibles_codigos])
}

# colectar_fuentes()
# fuente_fmi fuente_ocde fuente_sisi     fuente1     fuente2     fuente3 
# "R225C97"   "R226C96"    "R227C0"   "R225C97"   "R226C96"    "R227C0" 

Esta función podría incorporarse dentro de la función argendataR::write_output o como un feature nuevo del paquete argendataR::colectar_fuentes