ComenzarEmpieza gratis

Crea una nueva nube de palabras bajo demanda

Después de aislar el código que renderiza la nube de palabras para que no se actualice demasiado a menudo, el último paso es ofrecer una forma de renderizarla solo cuando el usuario lo decida. Esto se puede lograr con la ayuda de un actionButton().

Este ejercicio forma parte del curso

Casos prácticos: crea aplicaciones web con Shiny en R

Ver curso

Instrucciones del ejercicio

Tu tarea es añadir un botón a la app de Shiny y volver a renderizar la nube de palabras cuando se pulse el botón. En concreto:

  • Añade un botón de acción a la app con un ID de entrada "draw" y la etiqueta "Draw!" (línea 26).
  • Añade el botón como dependencia en la función que renderiza la nube de palabras para que se vuelva a ejecutar cuando se pulse el botón (línea 56).

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"
        )
      ),
      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"),
      # Add a "draw" button to the app
      ___(inputId = ___, label = ___)
    ),
    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({
    # Add the draw button as a dependency to
    # cause the word cloud to re-render on click
    input$___
    isolate({
      create_wordcloud(data_source(), num_words = input$num,
                       background = input$col)
    })
  })
}

shinyApp(ui = ui, server = server)
Editar y ejecutar código