ÎncepețiÎncepe gratuit

Afișează sau ascunde condiționat câmpurile obligatorii

Aplicația pentru norul de cuvinte are acum trei moduri diferite de a furniza cuvinte. Două dintre aceste metode implică un element de UI specific, util doar pentru ele: există un câmp textarea folosit doar când utilizatorul selectează sursa de cuvinte „own", și un câmp de încărcare a fișierului relevant doar când utilizatorul alege sursa „file". Ideal ar fi ca doar câmpurile necesare să fie afișate la un moment dat.

Acest exercițiu face parte din cursul

Studii de caz: Construirea aplicațiilor web cu Shiny în R

Vezi cursul

Instrucțiuni pentru exercițiu

Câmpul textarea a fost deja inclus într-un conditionalPanel(), astfel încât să apară doar când utilizatorul alege să introducă propriul text. Sarcina ta este să afișezi condiționat câmpul de încărcare a fișierului numai când utilizatorul selectează această opțiune ca sursă de date. Mai concret:

  • Înfășoară câmpul de încărcare a fișierului într-un panou condiționat (linia 19).
  • Condiția panoului trebuie să fie îndeplinită când utilizatorul alege opțiunea „file" din butoanele radio pentru sursa de date (linia 22).

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"
        )
      ),
      conditionalPanel(
        condition = "input.source == 'own'",
        textAreaInput("text", "Enter text", rows = 7)
      ),
      # Wrap the file input in a conditional panel
      ___(
        # The condition should be that the user selects
        # "file" from the radio buttons
        condition = ___,
        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({
    create_wordcloud(data_source(), num_words = input$num,
                        background = input$col)
  })
}

shinyApp(ui = ui, server = server)
Editează și rulează codul