BaşlayınÜcretsiz Başlayın

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ır
Kursu Görüntüle

Egzersiz 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_words ve background (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)
Kodu Düzenle ve Çalıştır