CommencerCommencer gratuitement

Ne générez pas en continu de nouveaux nuages de mots

L’application de nuage de mots comporte maintenant plusieurs entrées, et modifier chacune d’elles provoque le redessin du nuage avec les nouveaux paramètres, comme prévu.

Mais ce comportement peut parfois être gênant. Par exemple, lorsque vous saisissez du texte dans la zone de texte, le nuage de mots se régénère sans attendre que vous ayez fini. Cela peut être contrôlé avec isolate().

Tout le code à l’intérieur de renderWordcloud2() qui rend le nuage de mots a été supprimé. Votre tâche consiste à recréer le nuage de mots et à l’isoler afin que la modification des paramètres ne déclenche pas automatiquement un nouveau nuage de mots.

Cet exercice fait partie du cours

Études de cas : créer des applications web avec Shiny en R

Afficher le cours

Instructions

  • Assurez-vous que toute la fonction qui génère le nuage de mots est isolée (ligne 54).
  • Fournissez les arguments à create_wordcloud() en utilisant les entrées et variables réactives nécessaires. Les arguments de la fonction sont data, num_words et background (ligne 56).

Le résultat pourra donner l’impression que l’application est cassée, car vous ne pourrez pas créer un nouveau nuage de mots. Cela sera corrigé dans l’exercice suivant.

Exercice interactif pratique

Essayez cet exercice en complétant cet exemple de code.

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)
Modifier et exécuter le code