MulaiMulai sekarang secara gratis

Tampilkan atau sembunyikan input yang diperlukan secara kondisional

Aplikasi word cloud kini memiliki tiga cara berbeda untuk memasukkan kata ke dalam word cloud. Dua di antaranya memerlukan elemen UI khusus yang hanya berguna untuk metode tersebut: ada sebuah textarea yang hanya digunakan ketika pengguna memilih sumber kata "own", dan ada input berkas yang hanya relevan ketika pengguna memilih sumber "file". Idealnya, hanya input yang diperlukan yang muncul pada waktu tertentu.

Latihan ini adalah bagian dari kursus

Studi Kasus: Membangun Aplikasi Web dengan Shiny di R

Lihat Kursus

Petunjuk latihan

Textarea sudah dibungkus dalam conditionalPanel() sehingga hanya akan muncul saat pengguna memilih untuk memasukkan teks mereka sendiri. Tugas Anda adalah menampilkan input berkas secara kondisional hanya ketika pengguna memilih unggah berkas sebagai sumber data. Secara spesifik:

  • Bungkus input berkas dalam sebuah conditional panel (baris 19).
  • Kondisi untuk panel harus terpenuhi ketika pengguna memilih opsi "file" dari tombol radio sumber data (baris 22).

Latihan interaktif praktis

Cobalah latihan ini dengan menyelesaikan kode contoh berikut.

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)
Edit dan Jalankan Kode