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
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)