Inizia subitoInizia 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 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 interattivo pratico

Prova questo esercizio completando questo 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