Cargar los paquetes necesarios

library(shiny) library(ggplot2) library(DT) library(rmarkdown)

Leer los datos del archivo Excel

ruta_archivo <- “C:/Users/DELL/Downloads/Data Tasa de crecimiento.xlsx” datos <- readxl::read_excel(ruta_archivo)

Crear la interfaz de usuario de la app

ui <- fluidPage( # Título de la app titlePanel(“Tasa de IPC de países de América Latina”),

# Panel lateral con los controles de entrada sidebarLayout( sidebarPanel( # Selector de país selectInput(“pais”, “País:”, choices = unique(datos$Países)),

  # Selector de años
  sliderInput("year", "Año:",
              min = min(datos$Años), max = max(datos$Años),
              value = c(min(datos$Años), max(datos$Años))),
  
  # Botón para descargar el informe en pdf
  downloadButton("descargar", "Descargar informe")
),

# Panel principal con los resultados
mainPanel(
  # Pestañas para cada país
  tabsetPanel(
    id = "tabs",
    tabPanel("Gráfico", plotOutput("grafico")),
    tabPanel("Tabla", DTOutput("tabla"))
  )
)

) )

Crear la lógica del servidor de la app

server <- function(input, output) {

# Filtrar los datos según el país y el rango de años elegidos datos_filtrados <- reactive({ datos %>% filter(Países == input\(pais, Años >= input\)year[1], Años <= input$year[2]) })

# Mostrar el gráfico con los datos filtrados output\(grafico <- renderPlot({ ggplot(datos_filtrados(), aes(x = Años, y = IPC)) + geom_line() + geom_point() + labs(x = "Año", y = "IPC", title = paste("Tasa de IPC en", input\)pais)) + theme_minimal() })

# Mostrar la tabla con los datos filtrados output$tabla <- renderDT({ datos_filtrados() })

# Cambiar las pestañas según el país seleccionado observe({ updateTabsetPanel(session, “tabs”, selected = “Gráfico”) })

# Generar el informe en pdf con los datos filtrados output$descargar <- downloadHandler( filename = “informe.pdf”, content = function(file) { tempReport <- file.path(tempdir(), “informe.Rmd”) file.copy(“informe.Rmd”, tempReport, overwrite = TRUE)

  params <- list(país = input$pais,
                 año = input$year,
                 tabla = datos_filtrados(),
                 grafico = output$grafico)
  
  rmarkdown::render(tempReport, output_file = file,
                    params = params,
                    envir = new.env(parent = globalenv())
  )
}

) }

Ejecutar la app

shinyApp(ui = ui, server = server)