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
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)