ÎncepețiÎncepe gratuit

Descarcă datele filtrate

Descărcarea fișierelor se realizează folosind perechea de funcții downloadButton() și downloadHandler(). Aceste două funcții lucrează împreună în mod similar cu perechile de funcții de tip output și render: downloadButton() stabilește unde va apărea în UI, în timp ce downloadHandler() trebuie salvat în lista output și conține codul R efectiv pentru crearea fișierului descărcat.

Acest exercițiu face parte din cursul

Studii de caz: Construirea aplicațiilor web cu Shiny în R

Vezi cursul

Instrucțiuni pentru exercițiu

Adaugă posibilitatea de a descărca datele afișate în tabel sub formă de fișier CSV. Mai exact:

  • Adaugă un buton de descărcare în UI cu ID-ul "download_data" și eticheta "Download".
  • Adaugă un handler de descărcare în server (linia 31).
  • Dă fișierului descărcat numele "gapminder_data.csv" (linia 33).
  • Scrie datele filtrate într-un fișier CSV (linia 50).

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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))),
  # Add a download button
  ___(outputId = ___, label = ___),
  plotOutput("plot"),
  tableOutput("table")
)

server <- function(input, output) {
  output$table <- renderTable({
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    data
  })

  # Create a download handler
  output$download_data <- ___(
    # The downloaded file is named "gapminder_data.csv"
    filename = ___,
    content = function(file) {
      # The code for filtering the data is copied from the
      # renderTable() function
      data <- gapminder
      data <- subset(
        data,
        lifeExp >= input$life[1] & lifeExp <= input$life[2]
      )
      if (input$continent != "All") {
        data <- subset(
          data,
          continent == input$continent
        )
      }
      
      # Write the filtered data into a CSV file
      write.csv(___, file, row.names = FALSE)
    }
  )

  output$plot <- renderPlot({
    data <- gapminder
    data <- subset(
      data,
      lifeExp >= input$life[1] & lifeExp <= input$life[2]
    )
    if (input$continent != "All") {
      data <- subset(
        data,
        continent == input$continent
      )
    }
    ggplot(data, aes(gdpPercap, lifeExp)) +
      geom_point() +
      scale_x_log10()
  })
}

shinyApp(ui, server)
Editează și rulează codul