Alege sursa de date (server)
Când lucrezi cu butoane radio, uneori ai nevoie de logică condițională (instrucțiuni if-else) pentru a accesa valoarea butonului radio în server. Acest lucru este necesar atunci când se efectuează acțiuni diferite în funcție de opțiunea aleasă, iar valoarea selectată trebuie inspectată înainte de a decide cum să continui.
De exemplu, în cazul butoanelor radio care selectează o sursă de date, codul care rulează va fi diferit în funcție de opțiunea aleasă.
Următoarea ta sarcină este să folosești sursa de date corespunzătoare în funcția de generare a norului de cuvinte, în funcție de butonul radio pe care îl alege utilizatorul.
Acest exercițiu face parte din cursul
Studii de caz: Construirea aplicațiilor web cu Shiny în R
Instrucțiuni pentru exercițiu
- Definește o variabilă reactivă numită
data_sourcepentru a stoca datele care vor fi folosite la generarea norului de cuvinte (linia 28). - Dacă este selectată opțiunea "book" ("Art of War"), atribuie cartea
artofwarca sursă de date. Dacă este selectată opțiunea "own" ("Use your own words"), atribuie valoarea din zona de text ca sursă de date. Dacă este selectată opțiunea "file" ("Upload a file"), atribuie textul din fișierul încărcat de utilizator ca sursă de date (liniile 33 până la 36). - Folosește variabila reactivă
data_source()ca argumentdataal funcției de generare a norului de cuvinte (linia 51).
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)