ComenzarEmpieza gratis

No crees nuevas nubes de palabras continuamente

La app de la nube de palabras ahora tiene varias entradas diferentes, y al modificar cualquiera de ellas la nube se redibuja con el nuevo conjunto de parámetros, tal y como esperas.

Pero este comportamiento a veces puede resultar molesto. Por ejemplo, cuando escribes texto en el área de texto, la nube de palabras se regenera sin esperar a que termines de escribir. Esto se puede controlar con isolate().

Se ha eliminado todo el código dentro de renderWordcloud2() que renderiza la nube de palabras. Tu tarea es volver a crear la nube de palabras y aislarla para que cambiar los parámetros no dispare automáticamente una nueva nube.

Este ejercicio forma parte del curso

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

Ver curso

Instrucciones del ejercicio

  • Asegúrate de aislar por completo la función que genera la nube de palabras (línea 54).
  • Proporciona los argumentos a create_wordcloud() usando las entradas y variables reactivas necesarias. Los argumentos de la función son data, num_words y background (línea 56).

El resultado puede parecer que la app está rota porque no podrás crear una nueva nube de palabras, pero lo abordaremos en el siguiente ejercicio.

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")
    ),
    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({
    # Isolate the code to render the word cloud so that it will
    # not automatically re-render on every parameter change
    ___({
      # Render the word cloud using inputs and reactives
      create_wordcloud(data = ___, num_words = ___,
                       background = ___)
    })
  })
}

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