CommencezCommencez gratuitement

Créer un nouveau nuage de mots sur demande

Après avoir isolé le code de rendu du nuage de mots afin qu'il ne se mette pas à jour trop souvent, la dernière étape consiste à offrir un moyen de générer le nuage de mots seulement lorsque l'utilisatrice ou l'utilisateur le décide. On peut y parvenir grâce à actionButton().

Cette activité fait partie du cours

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

Voir le cours

Instructions de l’exercice

Votre tâche consiste à ajouter un bouton à l'application Shiny et à régénérer le nuage de mots lorsque le bouton est pressé. Plus précisément :

  • Ajoutez un bouton d'action à l'application avec un identifiant d'entrée « draw » et une étiquette « Draw! » (ligne 26).
  • Ajoutez le bouton comme dépendance dans la fonction de rendu du nuage de mots pour que le nuage soit relancé lorsque le bouton est pressé (ligne 56).

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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"),
      # Add a "draw" button to the app
      ___(inputId = ___, label = ___)
    ),
    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({
    # Add the draw button as a dependency to
    # cause the word cloud to re-render on click
    input$___
    isolate({
      create_wordcloud(data_source(), num_words = input$num,
                       background = input$col)
    })
  })
}

shinyApp(ui = ui, server = server)
Modifier et exécuter le code