Haz que la tabla sea interactiva
Las datatables del paquete DT suelen ser una mejor opción para mostrar datos en una app Shiny que las tablas integradas. Puedes convertir tablas de Shiny en datatables con dos simples cambios de código: en lugar de tableOutput() y renderTable(), utiliza DT::dataTableOutput() y DT::renderDataTable(). Las datatables ofrecen una gran variedad de opciones de personalización, pero no usaremos ninguna opción especial aquí.
Ten en cuenta que, con el paquete DT, la convención es no cargar el paquete DT, sino usar el prefijo DT:: al llamar a las funciones de datatable.
Este ejercicio forma parte del curso
Casos prácticos: crea aplicaciones web con Shiny en R
Instrucciones del ejercicio
El código de la app Shiny del último ejercicio de programación se proporciona sin modificaciones. Tu tarea es sustituir la tabla básica de Shiny por una tabla de DT. En concreto:
- En la UI, reemplaza la función de salida de tabla por la salida de datatable de
DT(línea 11). - En el servidor, reemplaza la función que renderiza la tabla por la función de renderizado de datatable de
DT(línea 31).
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
ui <- fluidPage(
h1("Gapminder"),
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"),
plotOutput("plot"),
# Replace the tableOutput() with DT's version
tableOutput("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
})
# Replace the renderTable() with DT's version
output$table <- renderTable({
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)