En este laboratorio vamos a iniciar una shiny app desde 0 y desarrollarla para generar figuras interactivas.
Objetivos:
Iniciaremos cargando las librerias que vamos a utilizar
# Cargar las librerias
library(shiny)
library(dplyr) # Para manipulacion de datos
library(ggplot2) # Para las figuras
Los datos se encuentran en el paquete de STNet, Puedes acceder a ellos usando:
# Cargar los datos del paqeute STNet
# Asegurate de tener la version mas reciente de STNet:
# devtools::install_github('jpablo91/STNet')
library(STNet)
data("vac")
La libreria shiny
nos proporciona varias funciones para crear nuestra aplicacion. La principal es la funcion shinyApp
, la cual nos pide dos argumentos ui
y server
. En este laboratorio vamos a crear dos objetos que contengan todo lo necesario para ser usados como argumentos en esta funcion.
La interfaz (UI), es donde definimos el tipo de input y outputs que tendra nuestra aplicacion, asi como cualquier otra informacion relevante que nos ayude a explicar la aplicacion.
Los inputs en shiny los definimos con la funcion correspondiente al tipo de input que queramos introducir. Por ejemplo, si queremos introducir una variable categorica, podemos usar la funcion selectInput()
, si queremos una variable numerica podemos usar sliderInput()
o numericInput()
. Podemos usar el mismo metodo que usamos para ver los layouts, para buscar todas las funciones en shiny que sean inputs.
De manera similar, los outputs tienen que ser especificados de acuerdo al tipo de output que queramos, si sera un plot, una tabla, o algun otro tipo de outputs que veremos mas adelante. Para mas informacion sobre los layouts, inputs y outputs, referirse a la documentacion de shiny.
# Definir Interfaz
ui <- fluidPage(
# Panel del titulo de la applicacion
titlePanel("Laboratorio 1"),
# Panel lateral
sidebarPanel(
# Input para motivo de movimiento
selectInput(inputId = "Mun", label = "Municipios:",
choices = unique(vac$NOM_MUN), multiple = T,
selected = unique(vac$NOM_MUN))
),
# Panel de Outputs
mainPanel(
plotOutput("VacMun") # Figura de serie de tiempo
)
)
El servidor (server) debe incluir todos los procesos que ejecutaremos en nuestra aplicacion.
# Define server logic required to draw a histogram
server <- function(input, output) {
x <- reactive({
p <- vac %>% # base de datos
filter(NOM_MUN %in% input$Mun) # filtramos los datos
})
output$VacMun <- renderPlot({
x() %>%
group_by(YEAR) %>%
summarise(Vac = sum(VAC_BOV)) %>%
ggplot(aes(x = YEAR, y=Vac)) +
geom_bar(position="dodge", stat="identity", fill = "deepskyblue4") +
labs(x = "Año", y = "Dosis de vacuna aplicados",
title = "Aplicación de vacuna antirrábica")
})
}
En el laboratorio anterior corrimos nuestra aplicacion usando el boton de Run App que se encuentra en la parte superior derecha de la seccion del editor del codigo, realmente lo que hace este boton es mandar todo el codigo del archivo a la consola.
# Correr la aplicacion
shinyApp(ui = ui, server = server)
Que otro tipo de graficos podemos hacer? que otros inputs podemos agregar?
# otras figuras
El paquete STNet contiene otras dos bases de datos que incorporaremos a esta aplicacion, para acceder a ellas usa:
data("vigilancia")
data("captura")
Examina las bases de datos e incorporalas en la aplicacion que hemos creado. Identifica que variables tienen en comun las bases de datos y con los mismos inputs que ya creamos, crea una figura para cada base de datos.