Gerekli girdileri koşullu olarak göster veya gizle
Kelime bulutu uygulamasında artık kelimeleri sağlamak için üç farklı yol var. Bu yöntemlerden ikisi sadece kendileri için yararlı olan belirli bir UI öğesini içeriyor: kullanıcı "own" kelime kaynağını seçtiğinde kullanılan bir metin alanı ve kullanıcı "file" kaynağını seçtiğinde anlamlı olan bir dosya yükleme girişi. İdeal olarak, yalnızca o anda gereken girdiler görünmelidir.
Bu egzersiz
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme
kursunun bir parçasıdırEgzersiz talimatları
Metin alanı, kullanıcı kendi metnini girmeyi seçtiğinde görünecek şekilde zaten bir conditionalPanel() içine alınmış durumda. Görevin, dosya yükleme girdisini yalnızca kullanıcı veri kaynağı olarak dosya yüklemeyi seçtiğinde koşullu olarak göstermek. Özellikle:
- Dosya girişini bir koşullu panel içine al (satır 19).
- Panelin koşulu, kullanıcı veri kaynağı radyo düğmelerinden "file" seçeneğini seçtiğinde sağlanmalı (satır 22).
Uygulamalı interaktif egzersiz
Bu örnek kodu tamamlayarak bu egzersizi bitirin.
ui <- fluidPage(
h1("Word Cloud"),
sidebarLayout(
sidebarPanel(
radioButtons(
inputId = "source",
label = "Word source",
choices = c(
"Art of War" = "book",
"Use your own words" = "own",
"Upload a file" = "file"
)
),
conditionalPanel(
condition = "input.source == 'own'",
textAreaInput("text", "Enter text", rows = 7)
),
# Wrap the file input in a conditional panel
___(
# The condition should be that the user selects
# "file" from the radio buttons
condition = ___,
fileInput("file", "Select a file")
),
numericInput("num", "Maximum number of words",
value = 100, min = 5),
colourInput("col", "Background color", value = "white")
),
mainPanel(
wordcloud2Output("cloud")
)
)
)
server <- function(input, output) {
data_source <- reactive({
if (input$source == "book") {
data <- artofwar
} else if (input$source == "own") {
data <- input$text
} else if (input$source == "file") {
data <- input_file()
}
return(data)
})
input_file <- reactive({
if (is.null(input$file)) {
return("")
}
readLines(input$file$datapath)
})
output$cloud <- renderWordcloud2({
create_wordcloud(data_source(), num_words = input$num,
background = input$col)
})
}
shinyApp(ui = ui, server = server)