ComenzarEmpieza gratis

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

Ver curso

Instrucciones del ejercicio

  • Define una variable reactiva llamada data_source para 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 artofwar como 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 argumento data de 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)
Editar y ejecutar código