library(shiny) library(ggplot2) library(DT) library(rmarkdown)
ruta_archivo <- “C:/Users/DELL/Downloads/Data Tasa de crecimiento.xlsx” datos <- readxl::read_excel(ruta_archivo)
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"))
)
)
) )
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())
)
}
) }
shinyApp(ui = ui, server = server)