Créer un nuage de mots à la demande
Après avoir isolé le code de rendu du nuage de mots pour éviter qu’il ne se mette à jour trop souvent, la dernière étape consiste à permettre le rendu du nuage de mots uniquement quand l’utilisateur le décide. Vous pouvez le faire grâce à actionButton().
Cet exercice fait partie du cours
Études de cas : créer des applications web avec Shiny en R
Instructions
Votre tâche est d’ajouter un bouton à l’application Shiny et de relancer le rendu du 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 afin que le nuage soit recalculé lorsque le bouton est pressé (ligne 56).
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"),
# 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)