Elige la fuente de datos (server)
Al trabajar con botones de opción (radio buttons), a veces necesitas usar lógica condicional (sentencias if-else) al acceder al valor del botón de opción en el servidor. Esto es necesario cuando se realizan acciones distintas según la elección exacta, y hay que inspeccionar el valor elegido antes de decidir cómo proceder.
Por ejemplo, con los botones de opción que seleccionan una fuente de datos, se ejecutará código diferente según la opción seleccionada.
Tu siguiente tarea es usar la fuente de datos adecuada en la función de nube de palabras, según el botón de opción que elija el usuario.
Este ejercicio forma parte del curso
Casos prácticos: crea aplicaciones web con Shiny en R
Instrucciones del ejercicio
- Define una variable reactiva llamada
data_sourcepara almacenar los datos que se usarán para la nube de palabras (línea 28). - Si se selecciona la opción "book" ("Art of War"), asigna el libro
artofwarcomo fuente de datos. Si se selecciona la opción "own" ("Usa tus propias palabras"), asigna el valor del área de texto como fuente de datos. Si se selecciona la opción "file" ("Sube un archivo"), asigna el texto de un archivo enviado por el usuario como fuente de datos (líneas 33 a 36). - Usa la variable reactiva
data_source()como el argumentodatade la función de nube de palabras (línea 51).
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
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)