Farklı çıktılarını farklı sekmelere yerleştir
Çok fazla içeriğin olduğunda ve bunu bölmek istediğinde sekmeler çok kullanışlıdır. Bir sekme oluşturmak için, UI öğelerini tabPanel() fonksiyonunun içine alman yeterli; ayrıca title argümanını kullanarak sekmeye bir başlık vermelisin.
Sekmelerin UI'da görünmesi için, sekme panellerinin tabsetPanel() içine alınarak bir sekme seti "konteyneri" içinde gruplanması gerekir.
Görevinde Shiny uygulamasına sekmeler ekleyeceksin: girdiler ve indirme düğmesi bir sekmede, grafik başka bir sekmede ve tablo üçüncü bir sekmede olsun. Bu yalnızca görsel bir değişiklik olduğundan, tüm kod değişiklikleri yalnızca UI kısmında yapılacak.
Bu egzersiz
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme
kursunun bir parçasıdırEgzersiz talimatları
- Üç sekme paneli için bir konteyner oluşturmak üzere
tabsetPanel()fonksiyonunu kullan:- Girdiler için ilk bir sekme ve sekmenin adı "Inputs" olsun.
- Grafiği gösteren ikinci bir sekme ve sekmenin adı "Plot" olsun (satır 16).
- Tabloyu gösteren üçüncü bir sekme ve sekmenin adı "Table" olsun (satır 21).
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
ui <- fluidPage(
h1("Gapminder"),
# Create a container for tab panels
___(
# Create an "Inputs" tab
tabPanel(
title = ___,
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")
),
# Create a "Plot" tab
___(
title = "Plot",
plotOutput("plot")
),
# Create "Table" tab
___(
title = ___,
DT::dataTableOutput("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
})
output$table <- DT::renderDataTable({
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)