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
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 sontdata,num_wordsetbackground(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)