Coloca diferentes resultados en pestañas distintas
Las pestañas son útiles cuando tienes demasiado contenido y quieres dividirlo. Para crear una pestaña, simplemente envuelve los elementos de la interfaz en la función tabPanel(), y proporciona un título para la pestaña usando el argumento title.
Para que las pestañas aparezcan en la interfaz, los paneles de pestañas deben agruparse en un "contenedor" de pestañas envolviéndolos todos dentro de tabsetPanel().
Tu tarea es añadir pestañas a la app de Shiny, de modo que las entradas y el botón de descarga estén en una pestaña, el gráfico en otra, y la tabla en una tercera. Como es un cambio puramente visual, todos los cambios de código deben hacerse solo en la parte de la interfaz (UI).
Este ejercicio forma parte del curso
Casos prácticos: crea aplicaciones web con Shiny en R
Instrucciones del ejercicio
- Usa la función
tabsetPanel()para crear un contenedor con tres paneles de pestañas:- Una primera pestaña para las entradas, y nómbrala "Inputs".
- Una segunda pestaña que muestre el gráfico, y nómbrala "Plot" (línea 16).
- Una tercera pestaña que muestre la tabla, y nómbrala "Table" (línea 21).
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
ui <- fluidPage(
h1("Gapminder"),
# Create a container for tab panels
___(
# Create an "Inputs" tab
tabPanel(
title = ___,
sliderInput(inputId = "life", label = "Life expectancy",
min = 0, max = 120,
value = c(30, 50)),
selectInput("continent", "Continent",
choices = c("All", levels(gapminder$continent))),
downloadButton("download_data")
),
# Create a "Plot" tab
___(
title = "Plot",
plotOutput("plot")
),
# Create "Table" tab
___(
title = ___,
DT::dataTableOutput("table")
)
)
)
server <- function(input, output) {
filtered_data <- reactive({
data <- gapminder
data <- subset(
data,
lifeExp >= input$life[1] & lifeExp <= input$life[2]
)
if (input$continent != "All") {
data <- subset(
data,
continent == input$continent
)
}
data
})
output$table <- DT::renderDataTable({
data <- filtered_data()
data
})
output$download_data <- downloadHandler(
filename = "gapminder_data.csv",
content = function(file) {
data <- filtered_data()
write.csv(data, file, row.names = FALSE)
}
)
output$plot <- renderPlot({
data <- filtered_data()
ggplot(data, aes(gdpPercap, lifeExp)) +
geom_point() +
scale_x_log10()
})
}
shinyApp(ui, server)