필요한 입력만 조건부로 표시하거나 숨기기
이제 워드 클라우드 앱에서는 세 가지 방법으로 워드를 입력할 수 있어요. 이 중 두 가지 방법은 해당 방법에서만 유용한 특정 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)