Scegli l'origine dei dati (server)
Quando lavori con i pulsanti di opzione (radio button), a volte devi usare della logica condizionale (istruzioni if-else) per accedere al valore del pulsante nel server. Questo è necessario quando si eseguono azioni diverse a seconda della scelta precisa, e il valore selezionato va controllato prima di decidere come procedere.
Per esempio, con i pulsanti di opzione che selezionano un'origine dei dati, dovrà essere eseguito codice diverso a seconda dell'opzione scelta.
Il tuo prossimo compito è usare l'origine dei dati corretta nella funzione della word cloud, in base al pulsante di opzione selezionato dall'utente.
Questo esercizio fa parte del corso
Casi di studio: creare applicazioni web con Shiny in R
Istruzioni dell'esercizio
- Definisci una variabile reattiva chiamata
data_sourceper contenere i dati che verranno usati per la word cloud (riga 28). - Se è selezionata l'opzione "book" ("Art of War"), assegna il libro
artofwarcome origine dei dati. Se è selezionata l'opzione "own" ("Usa le tue parole"), assegna il valore della textarea come origine dei dati. Se è selezionata l'opzione "file" ("Carica un file"), assegna come origine dei dati il testo da un file caricato dall'utente (righe 33-36). - Usa la variabile reattiva
data_source()come argomentodatadella funzione per la word cloud (riga 51).
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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"
)
),
textAreaInput("text", "Enter text", rows = 7),
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) {
# Create a "data_source" reactive variable
data_source <- ___({
# Return the appropriate data source depending on
# the chosen radio button
if (input$source == "book") {
data <- artofwar
} else if (input$source == ___) {
data <- input$___
} else if (___ == "file") {
data <- input_file()
}
return(data)
})
input_file <- reactive({
if (is.null(input$file)) {
return("")
}
readLines(input$file$datapath)
})
output$cloud <- renderWordcloud2({
# Use the data_source reactive variable as the data
# in the word cloud function
create_wordcloud(data = ___(), num_words = input$num,
background = input$col)
})
}
shinyApp(ui = ui, server = server)