25- 1. 텍스트 입력용 입력 위젯
텍스트 입력용 입력 위젯 함수에는 textInput() 과 textAreaInput()이 있다. 다음 앱은 텍스트를 입력 받아서 그대로 출력한다.
textInput("입력아이디", "Label")
library(shiny)
ui <- fluidPage(
textInput("myText", "텍스트를 입력하세요"),
verbatimTextOutput("txt")
)
server <- function(input,output,session)
{
output$txt <- renderPrint({
req(input$myText)
input$myText
})
}
shinyApp(ui,server)
textAreaInput() 함수도 거의 비슷한데, 여러 문장 등이 있는 텍스트와 같이 구조화 되지 않은 텍스트를 입력 받을 때 사용한다.
웹에서 패스워드를 입력하는 폼에 패스워드를 입력할 때는 입력하는 텍스트가 보이지 않는다. 샤이니의 passwordInput()도 같은 기능을 한다.
library(shiny)
ui <- fluidPage(
passwordInput("password", "패스워드")
)
server <- function(input,output,session){
}
shinyApp(ui,server)
웹에서 사용자의 이름과 패스워드로 사용자를 인식하는 방법을 인증기능 이라고 부른다. 이런 인증 기능을 구현하려면 데이테베이스에 사용자와 사용자의 패스워드를 저장하는 기능과 이를 암호화하는 과정 등을 갖추어야 한다.
인터넷을 찾아보면 이런 인증 기능을 샤이니에서 구현한 사례들을 찾아볼 수 있다. 하지만 공식적인 인증 기능이 들어가지 않았는데, 나중에 추가 될 가능성이 높다고 보고 있다.
textInput() 과 passwordInput 을 사용하여 텍스트 입력 위젯들을 사용해 보았다.
25-2. 숫자 입력용 입력 위젯들
숫자 입력용 입력 위젯 함수들 중 가장 기본은 숫자를 직접 입력할 수 있게 해주는 numericInput()이다. numericInput()인 경우 첫 번째, 두 번째 인자는 앞에서 본 입력 위젯 함수들의 공통적인 특징 그대로 입력 아이디와 레이블이다. 그 다음은 숫자 입력용 위젯에 필요한 내용들이다. 초기값을 설정하는 value, 최솟값과 최댓값을 정해주는 min, max 인자가 있다. 그리고 숫자 입력 위젯의 오른쪽에는 위아래 화살표 모양이 있는데 이것을 사용하면 숫자를 단계적으로 올리거나 내릴 수 있다. 올리거나 내리는 폭은 step 옵션으로 결정한다.
함수의 도움말을 보면 아주 간단한 앱을 볼 수 있다.
numericInput("입력아이디","레이블(제목)",초기값,최솟값,최댓값,step 옵션 값)
library(shiny)
ui <- fluidPage(
numericInput("obs","Observations:",10,min=1,max=100),
verbatimTextOutput("value")
)
server <- function(input,output){
output$value <- renderText({input$obs})
}
shinyApp(ui,server)
sliderInput()는 숫자를 직접 입력하는 대신 슬라이더를 사용하여 숫자를 입력하게 해주는 입력 위젯이다. 이 함수는 numericInput()보다 더 많은 옵션들을 제공한다.
sliderInput()함수의 첫 번째 인자는 입력아이디고, 두 번째 인자는 레이블이다. 그리고 이후에 쓰이는 인자들이 min,max,value 가 있어서 입력값의 최솟값, 최댓값, 초깃값을 결정한다. 이 부분들은 numericInput() 위젯 함수의 인자들과 같다. 슬라이더 입력 위젯들의 다양한 쓰임새는 샤이니 갤러리의 'Sliders'라는 앱에 잘 나와 있다. 이 앱이 생성하는 입력 위잣들은 다음 그림에서 볼 수 있다.
ui <- fluidPage(
sliderInput("integer","INPUT Integer : ",min=0,max=1000,value =500),
plotOutput("add")
)
server <- function(input,output)
{
output$add <- renderPlot({hist(rnorm(input$integer))
})
}
shinyApp(ui,server)
https://shiny.rstudio.com/articles/sliders.html
위의 홈페이지에 들어가면 Sliders 에 관한 내용이 나와있다.
Shiny - Using sliders
shiny.rstudio.com
library(shiny)
# Define UI for slider demo app ----
ui <- fluidPage(
# App title ----
titlePanel("Sliders"),
# Sidebar layout with input and output definitions ----
sidebarLayout(
# Sidebar to demonstrate various slider options ----
sidebarPanel(
# Input: Simple integer interval ----
sliderInput("integer", "Integer:",
min = 0, max = 1000,
value = 500),
# Input: Decimal interval with step value ----
sliderInput("decimal", "Decimal:",
min = 0, max = 1,
value = 0.5, step = 0.1),
# Input: Specification of range within an interval ----
sliderInput("range", "Range:",
min = 1, max = 1000,
value = c(200,500)),
# Input: Custom currency format for with basic animation ----
sliderInput("format", "Custom Format:",
min = 0, max = 10000,
value = 0, step = 1000,
pre = "$", sep = ",",
animate = TRUE),
# Input: Animation with custom interval (in ms) ----
# to control speed, plus looping
sliderInput("animation", "Looping Animation:",
min = 1, max = 2000,
value = 1, step = 10,
animate =
animationOptions(interval = 300, loop = TRUE))
),
# Main panel for displaying outputs ----
mainPanel(
# Output: Table summarizing the values entered ----
tableOutput("values")
)
)
)
# Define server logic for slider examples ----
server <- function(input, output) {
# Reactive expression to create data frame of all input values ----
sliderValues <- reactive({
data.frame(
Name = c("Integer",
"Decimal",
"Range",
"Custom Format",
"Animation"),
Value = as.character(c(input$integer,
input$decimal,
paste(input$range, collapse = " "),
input$format,
input$animation)),
stringsAsFactors = FALSE)
})
# Show the values in an HTML table ----
output$values <- renderTable({
sliderValues()
})
}
shinyApp(ui,server)
1. 정수 입력 : numericInput()과 거의 유사.
2. 소숫점을 가진 숫자 : step 옵션을 사용하면 소숫점 표현 가능.
3. 범위 선택 : value 갑승로 2개의 요소를 가진 벡터를 사용하여 범위를 선택 가능.
4. 사용자 정의 포멧과 애니메이션
5. 애니메이션 조절
sliders 홈페이지에 나와있는 코드를 자신이 조금씩 수정하면서 이해하면 더 좋을 것 같다.
'전공 > R프로그래밍' 카테고리의 다른 글
R프로그래밍 25. 샤이니 앱의 기본 틀 (0) | 2019.08.26 |
---|---|
R 프로그래밍 24. 스콥과 시야(visibility) (0) | 2019.08.26 |
R프로그래밍 23. 코드 실행 과정과 앱의 상태 (0) | 2019.08.20 |
R프로그래밍 22. R 세션과 options() (2) | 2019.08.19 |
R프로그래밍 21. 샤이니에서 유용한 함수들 (0) | 2019.08.16 |