Shiny学习笔记:UI之输入

前面我们讲到,Shiny提供很多插件会丰富前端界面,前段设计主要包括输入,输出以及界面排版。

输入

所有的输入函数都有相同的第一个参数:inputId,用来连接前端和后端。如果你设计了一个IDname的输入,那么服务端可以通过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

Researcher

I am a PhD student of Crop Genetics and Breeding at the Zhejiang University Crop Science Lab. My research interests covers a range of issues:Population Genetics Evolution and Ecotype Divergence Analysis of Oilseed Rape, Genome-wide Association Study (GWAS) of Agronomic Traits.

comments powered by Disqus