MulaiMulai sekarang secara gratis

Jangan terus-menerus membuat word cloud baru

Aplikasi word cloud sekarang memiliki beberapa masukan berbeda, dan memodifikasi masing-masing akan membuat word cloud digambar ulang dengan parameter baru, sesuai harapan.

Namun, perilaku ini kadang dapat mengganggu. Misalnya, saat mengetik teks di textarea, word cloud terus dibuat ulang tanpa menunggu Anda selesai mengetik. Ini dapat dikendalikan dengan isolate().

Seluruh kode di dalam renderWordcloud2() yang merender word cloud telah dihapus. Tugas Anda adalah membuat ulang word cloud tersebut dan mengisolasinya agar perubahan parameter tidak otomatis memicu word cloud baru.

Latihan ini adalah bagian dari kursus

Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Lihat Kursus

Petunjuk latihan

  • Pastikan seluruh fungsi pembuat word cloud diisolasi (baris 54).
  • Berikan argumen ke create_wordcloud() menggunakan input dan variabel reaktif yang diperlukan. Argumen untuk fungsi tersebut adalah data, num_words, dan background (baris 56).

Hasilnya mungkin terlihat seperti aplikasi rusak karena Anda tidak akan dapat membuat word cloud baru, tetapi hal ini akan ditangani pada latihan berikutnya.

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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)
Edit dan Jalankan Kode