Sürekli yeni kelime bulutları oluşturma
Kelime bulutu uygulaması artık birkaç farklı girdi içeriyor ve her birini değiştirmen, beklendiği gibi, kelime bulutunun yeni parametrelerle yeniden çizilmesine neden oluyor.
Ama bu davranış bazen can sıkıcı olabilir. Örneğin, metin alanına yazarken, kelime bulutu sen yazmayı bitirmeden durmadan yeniden oluşturuluyor. Bunu isolate() ile kontrol edebilirsin.
Kelime bulutunu oluşturan renderWordcloud2() içindeki tüm kod kaldırıldı. Görevin, kelime bulutunu yeniden oluşturmak ve parametreleri değiştirdiğinde otomatik olarak yeni bir kelime bulutunu tetiklemeyecek şekilde izole etmek.
Bu egzersiz
Vaka Çalışmaları: R ile Shiny Kullanarak Web Uygulamaları Geliştirme
kursunun bir parçasıdırEgzersiz talimatları
- Tüm kelime bulutu oluşturma fonksiyonunun izole edildiğinden emin ol (satır 54).
create_wordcloud()fonksiyonuna gerekli girdiler ve reaktif değişkenleri kullanarak argümanları ver. Fonksiyonun argümanlarıdata,num_wordsvebackground(satır 56).
Bunun sonucu uygulama bozukmuş gibi görünebilir, çünkü yeni bir kelime bulutu oluşturamayacaksın; ancak bu, sonraki bir egzersizde ele alınacak.
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)
),
conditionalPanel(
condition = "input.source == 'file'",
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({
# Isolate the code to render the word cloud so that it will
# not automatically re-render on every parameter change
___({
# Render the word cloud using inputs and reactives
create_wordcloud(data = ___, num_words = ___,
background = ___)
})
})
}
shinyApp(ui = ui, server = server)