ComenzarEmpieza gratis

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

Ver curso

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)
Editar y ejecutar código