Tepkisel değişkenler kod tekrarını azaltır
Önceki egzersizlerde, giriş değerlerine göre gapminder verisini filtreleyen kod üç kez tekrarlandı: bir kez tabloda, bir kez grafikte ve bir kez de indirme işleyicisinde.
Reactive değişkenler kod tekrarını azaltmak için kullanılabilir. Bu genelde iyi bir fikirdir çünkü bakımı kolaylaştırır.
Bu egzersiz
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme
kursunun bir parçasıdırEgzersiz talimatları
Veriyi filtreleyen yinelenen kod parçaları kaldırıldı. Görevin, veriyi filtreleyen bir tepkisel değişken eklemek ve bunun yerine bu değişkeni kullanmak. Özellikle:
- Önceki egzersizdeki filtreleme kodunu kullanan
reactive()fonksiyonuylafiltered_dataadlı bir tepkisel değişken oluştur (satır 15). - Tablonun çıktısını, grafiğin çıktısını ve indirilecek dosyayı üretmek için bu tepkisel değişkeni kullan (satırlar 33, 42 ve 50).
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
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)