Les variables réactives réduisent la duplication de code
Dans les exercices précédents, le code qui filtre gapminder en fonction des valeurs saisies est dupliqué trois fois : une fois dans le tableau, une fois dans le graphique et une fois dans le gestionnaire de téléchargement.
Les variables réactives peuvent être utilisées pour réduire la duplication de code, ce qui est généralement une bonne idée car cela facilite la maintenance.
Cet exercice fait partie du cours
Études de cas : créer des applications web avec Shiny en R
Instructions
Les blocs de code dupliqués qui filtrent les données ont été supprimés. Votre tâche est d’ajouter une variable réactive qui filtre les données, puis d’utiliser cette variable à la place. Plus précisément :
- Créez une variable réactive nommée
filtered_dataà l’aide de la fonctionreactive()qui reprend le code de filtrage de l’exercice précédent (ligne 15). - Utilisez la variable réactive pour générer la sortie du tableau, la sortie du graphique et le fichier à télécharger (lignes 33, 42 et 50).
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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(outputId = "download_data", label = "Download"),
plotOutput("plot"),
tableOutput("table")
)
server <- function(input, output) {
# Create a reactive variable named "filtered_data"
filtered_data <- ___({
# Filter the data (copied from previous exercise)
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 <- renderTable({
# Use the filtered_data variable to render the table output
data <- ___
data
})
output$download_data <- downloadHandler(
filename = "gapminder_data.csv",
content = function(file) {
# Use the filtered_data variable to create the data for
# the downloaded file
data <- ___
write.csv(data, file, row.names = FALSE)
}
)
output$plot <- renderPlot({
# Use the filtered_data variable to create the data for
# the plot
data <- ___
ggplot(data, aes(gdpPercap, lifeExp)) +
geom_point() +
scale_x_log10()
})
}
shinyApp(ui, server)