Shiny学习笔记:UI之输入
前面我们讲到,Shiny提供很多插件会丰富前端界面,前段设计主要包括输入,输出以及界面排版。
输入
所有的输入函数都有相同的第一个参数:inputId
,用来连接前端和后端。如果你设计了一个ID
为name
的输入,那么服务端可以通过input$name
来获取。
inputId
有两个限制:
-
它必须是一个只包含字母、数字以及下划线的简单字符串,空格、破折号、句号以及一些特殊字符不能用
-
它必须唯一的,因为需要用来连接前后端
大部分的input
函数还有第二个参数:label
,主要是用来显示该输入控件,label
没有限制,可以自己随便命名,最好取一些易读易懂的标志语,必须输入的是名字,那么label
命名为name
就很好了,第三个参数是value
,设置输入默认值。还有一些其它参数,不同的输入控件是不一样的。
建议创建
input
的时候,首先按位置输入inputId
以及label
参数,其它参数按名称设置:
sliderInput("min", "Limit (minimum)", value = 50, min = 0, max = 100)
文本输入
文本输入有小文本输入textInput()
,密码输入passwordInput()
以及段落输入textAreaInput()
等:
library(shiny)
ui <- fluidPage(
ui <- fluidPage(
textInput("name", "What's your name?"),
passwordInput("password", "What's your password?"),
textAreaInput("story", "Tell me about yourself", rows = 3)
)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
数值输入
数值输入有数值选择输入sliderInput()
,文本框数值输入numericInput()
。
library(shiny)
ui <- fluidPage(
numericInput("num", "Number one", value = 25, min = 0, max = 100),
sliderInput("num2", "Number two", value = 50, min = 0, max = 100),
sliderInput("rng", "Range", value = c(10, 45), min = 0, max = 100)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
Sliders
类输入具有很强的可塑性,RStudio提供了一个
shiny app
来演示不同类型的Slider
类输入。
日期输入
单个日期输入用dateInput()
,日期范围输入用dateRangeInput()
,这些函数提供了十分方便的日历选择器:
library(shiny)
ui <- fluidPage(
dateInput("dob", "When were you born?"),
dateRangeInput("holiday", "When do you want to go on vacation next?")
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
限制性选择输入
有两种方法允许用户选择预设的选项:selectInput()
,radioButtons()
library(shiny)
animals <- c("dog", "cat", "mouse", "bird", "other", "I hate animals")
ui <- fluidPage(
selectInput("state", "What's your favourite state?", state.name),
radioButtons("animal", "What's your favourite animal?", animals)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
radioButtons()
是适用于比较短的list,selectInput()
则适用于长list,通过设置参数multiple=TRUE
可以一次性选择多个选项
library(shiny)
animals <- c("dog", "cat", "mouse", "bird", "other", "I hate animals")
ui <- fluidPage(
selectInput(
"state", "What's your favourite state?", state.name,
multiple = TRUE
)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
radioButton()
无法一次性选择多个,但是有一个类似的函数checkboxGroupInput()
可以一次性选择多个
library(shiny)
animals <- c("dog", "cat", "mouse", "bird", "other", "I hate animals")
ui <- fluidPage(
checkboxGroupInput("animal", "What animals do you like?", animals)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
如果只需要yes/no这样的单勾选框,可以使用checkboxInput()
library(shiny)
ui <- fluidPage(
checkboxInput("cleanup", "Clean up?", value = TRUE),
checkboxInput("shutdown", "Shutdown?")
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
文件上传
文件上传由fileInput()
实现:
library(shiny)
ui <- fluidPage(
fileInput("upload", NULL)
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
动作按钮
actionButton()
以及actionLink()
提供动作按钮给用户,它们一般是与服务端observeEvent()
以及enevtReactive()
一起使用。
library(shiny)
ui <- fluidPage(
actionButton("click", "Click me!"),
actionButton("drink", "Drink me!", icon = icon("cocktail"))
)
server <- function(input, output, session) {
}
shinyApp(ui, server)
关于输入控件更多可参考RStudio提供的 文档。
参考:https://mastering-shiny.org/basic-ui.html