시작하기무료로 시작하기

필요한 입력만 조건부로 표시하거나 숨기기

이제 워드 클라우드 앱에서는 세 가지 방법으로 워드를 입력할 수 있어요. 이 중 두 가지 방법은 해당 방법에서만 유용한 특정 UI 요소를 사용합니다. 사용자가 "own" 소스를 선택했을 때만 사용하는 textarea가 있고, 사용자가 "file" 소스를 선택했을 때만 관련 있는 파일 입력이 있어요. 이상적으로는, 매 순간 필요한 입력만 화면에 보이는 것이 좋습니다.

이 연습은 강의의 일부입니다

사례 연구: R의 Shiny로 웹 애플리케이션 만들기

강의 보기

연습 안내

textarea는 이미 conditionalPanel()로 감싸져 있어 사용자가 직접 텍스트를 입력하도록 선택했을 때만 표시돼요. 이제 사용자가 데이터 소스로 파일 업로드를 선택했을 때만 파일 입력이 보이도록 설정해 주세요. 구체적으로:

  • 파일 입력을 조건부 패널로 감싸세요(19행).
  • 패널의 조건은 데이터 소스 라디오 버튼에서 사용자가 "file" 옵션을 선택했을 때 만족해야 합니다(22행).

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

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)
코드 편집 및 실행