IniziaInizia gratis

Non creare continuamente nuove word cloud

L'app della word cloud ora ha diversi input e modificarne uno qualsiasi fa ridisegnare la word cloud con il nuovo set di parametri, proprio come previsto.

Tuttavia, a volte questo comportamento può risultare fastidioso. Ad esempio, quando digiti del testo nella textarea, la word cloud continua a rigenerarsi senza aspettare che tu finisca di scrivere. Questo si può controllare con isolate().

Tutto il codice dentro renderWordcloud2() che disegna la word cloud è stato rimosso. Il tuo compito è ricreare la word cloud e isolarla in modo che la modifica dei parametri non avvii automaticamente una nuova word cloud.

Questo esercizio fa parte del corso

Casi di studio: creare applicazioni web con Shiny in R

Visualizza il corso

Istruzioni dell'esercizio

  • Assicurati che l'intera funzione che genera la word cloud sia isolata (riga 54).
  • Fornisci gli argomenti a create_wordcloud() usando gli input e le variabili reattive necessari. Gli argomenti della funzione sono data, num_words e background (riga 56).

Il risultato potrà sembrare che l'app sia rotta perché non potrai creare una nuova word cloud, ma lo affronteremo in un esercizio successivo.

Esercizio pratico interattivo

Prova a risolvere questo esercizio completando il codice di esempio.

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)
Modifica ed esegui il codice