R/find_inputs.R

#' Identifica los insumos de una o más variables del diccionario.
#' 
#' @param varlist (string vector) Los nombres de variables del diccionario.
#' @param src     (string scalar) El nombre de la encuesta.
#' @param year    (double scalar) El año de la encuesta.
#' @param month   (double scalar) El mes de la encuesta.
#'   
#' @return (string vector) Los nombres de todos los insumos de \code{varlist}.
#'
#' @export
#' @importFrom magrittr %>%
#' @encoding   UTF-8
#'
#' @examples
#' find_inputs("educ_", src = "casen", year = 2015, month = 1)
find_inputs <- function(varlist,
                        src   = c("casen", "ene", "esi"), 
                        year  = 2100, 
                        month = 12) {
 
  # Convierte el par (year, month) en una fecha
  date <- c(year, month, "1") %>%
    paste(collapse = "-") %>% 
    as.Date()
  
  # Carga la tabla de correspondencias
  df <- sprintf("io_%s", src) %>% get()

  # Filtra df, dejando solo los inputs relevantes
  df <- df %>%
    dplyr::filter(output %in% varlist) %>%
    dplyr::filter(date0 <= date, date <= date1)

  # Verifica que todas las variables hayan sido encontradas
  missed <- setdiff(varlist, df[["output"]])
  if (length(missed) != 0) {
    msg <- paste(missed, collapse = ", ")
    msg <- paste(msg, "not found in dictionary")
    stop(msg)
  }

  # Particiona los registros con más de un input
  df <- dplyr::distinct(df, inputs)  
  df <- df$inputs %>% strsplit(split = " ") %>% unlist()
  
  # Reporta el resultado
  return(df)
}
igutierrezm/olndictr documentation built on May 31, 2019, 8:07 a.m.