ÎncepețiÎncepe gratuit

Nu genera nori de cuvinte în mod continuu

Aplicația pentru norul de cuvinte dispune acum de mai multe tipuri de input-uri, iar modificarea oricăruia dintre ele determină redesenarea norului de cuvinte cu noii parametri – exact cum era de așteptat.

Totuși, acest comportament poate fi uneori incomod. De exemplu, când scrii text în câmpul textarea, norul de cuvinte se regenerează continuu, fără să aștepte să termini de tastat. Acest lucru poate fi controlat cu isolate().

Întreg codul din renderWordcloud2() care randează norul de cuvinte a fost eliminat. Sarcina ta este să recreezi norul de cuvinte și să îl izolezi, astfel încât modificarea parametrilor să nu declanșeze automat generarea unui nor nou.

Acest exercițiu face parte din cursul

Studii de caz: Construirea aplicațiilor web cu Shiny în R

Vezi cursul

Instrucțiuni pentru exercițiu

  • Asigură-te că întreaga funcție de generare a norului de cuvinte este izolată (linia 54).
  • Furnizează argumentele funcției create_wordcloud() folosind input-urile și variabilele reactive necesare. Argumentele funcției sunt data, num_words și background (linia 56).

Este posibil ca rezultatul să pară că aplicația nu funcționează, deoarece nu vei putea crea un nor de cuvinte nou – însă această problemă va fi rezolvată într-un exercițiu următor.

Exercițiu interactiv practic

Încearcă acest exercițiu completând acest cod de exemplu.

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)
Editează și rulează codul