1.1基礎(chǔ)UI
library(shiny)
ui <- fluidPage(
# front end interface
)
server <- function(input, output, session) {
# back end logic
}
shinyApp(ui, server)
1.1 輸入
1.1.1 常規(guī)構(gòu)架
所有的輸入都包含了一個同樣的變量inputID
這個inputID
用來連接前端和后臺。如果UI端口輸入的ID是name
那么后臺server就是input$name
大多數(shù)inputID
都有一個參數(shù)就是label
,這是為了UI端的可讀性豌鹤,顯示給用戶看的。除此以外inputID
還有一個參數(shù)就是value
碟联。下面就是一個完整的例子芥驳。包含了name, label, value
的inputID
sliderInput("min", "Limit (minimum)", value = 50, min = 0, max = 100)
1.1.2 文字
textInput()
: 少量文字
passwordInput()
: 密碼
textAreaInput()
: 成篇文字
ui <- fluidPage(
textInput("name", "What's your name?"),
passwordInput("password", "What's your password?"),
textAreaInput("story", "Tell me about yourself", rows = 3)
)
1.1.3 數(shù)字
可以通過numericInput()
或者sliderInput()
創(chuàng)建輸入框.
ui <- fluidPage(
numericInput("num", "Number one", value = 0, min = 0, max = 100),
sliderInput("num2", "Number two", value = 50, min = 0, max = 100),
sliderInput("rng", "Range", value = c(10, 20), min = 0, max = 100)
)
1.1.4 日期
ui <- fluidPage(
dateInput("dob", "When were you born?"),
dateRangeInput("holiday", "When do you want to go on vacation next?")
)
1.1.5 選項
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)
)
還可以設(shè)置圖標(biāo)
ui <- fluidPage(
radioButtons("rb", "Choose one:",
choiceNames = list(
icon("angry"),
icon("smile"),
icon("sad-tear")
),
choiceValues = list("angry", "happy", "sad")
)
)
dropdown選項是
ui <- fluidPage(
selectInput(
"state", "What's your favourite state?", [state.name](<http://state.name/>),
multiple = TRUE
)
)
如果選項很多的話可以參考
也可以設(shè)置多選框
ui <- fluidPage(
checkboxGroupInput("animal", "What animals do you like?", animals)
)
check就是yes狸捕,沒有check就是no的設(shè)置。
ui <- fluidPage(
checkboxInput("cleanup", "Clean up?", value = TRUE),
checkboxInput("shutdown", "Shutdown?")
)
1.1.6 上傳文件
ui <- fluidPage(
fileInput("upload", NULL)
)
1.1.7 動作按鈕
ui <- fluidPage(
actionButton("click", "Click me!"),
actionButton("drink", "Drink me!", icon = icon("cocktail"))
)
actionButton
ui <- fluidPage(
fluidRow(
actionButton("click", "Click me!", class = "btn-danger"),
actionButton("drink", "Drink me!", class = "btn-lg btn-success")
),
fluidRow(
actionButton("eat", "Eat me!", class = "btn-block")
)
)
1.2 輸出
和輸入一樣乐设,輸出也需要自己唯一的ID。如果你在UI定義一個輸出的結(jié)果的ID是plot
绎巨,那么在后端這個結(jié)果就是server$plot
近尚。然后在后端服務(wù)器上,結(jié)果的輸出都用到對應(yīng)的render
的函數(shù)场勤。
1.2.1 文字
ui <- fluidPage(
textOutput("text"),
verbatimTextOutput("code")
)
server <- function(input, output, session) {
output$text <- renderText({
"Hello friend!"
})
output$code <- renderPrint({
summary(1:10)
})
}
shinyApp(ui, server)
library(shiny)
ui <- fluidPage(
textOutput("text"),
verbatimTextOutput("print")
)
server <- function(input, output, session) {
output$text <- renderText("hello!")
output$print <- renderPrint("hello!")
}
shinyApp(ui, server)
- renderText(): 把結(jié)果整合成了一串字符戈锻,和UI中的textOutput()是一對
- renderPrint():用R語言的方式輸出結(jié)果,和UI中的verbatimTextOutput() 是一對
1.2.2 表格
有兩個方式可以展現(xiàn)data.frame
-
tableOutput()
renderTable()
用來展現(xiàn)一個完整的data.frame
-
dataTableOutput()
renderDataTable()
可以把data.frame分頁展示
ui <- fluidPage(
tableOutput("static"),
dataTableOutput("dynamic")
)
server <- function(input, output, session) {
output$static <- renderTable(head(mtcars))
output$dynamic <- renderDataTable(mtcars, options = list(pageLength = 5))
}
1.2.3 圖
plotOutput()
and renderPlot()
library(shiny)
ui <- fluidPage(
plotOutput("plot", width = "400px")
)
server <- function(input, output, session) {
output$plot <- renderPlot(plot(1:5), res = 96)
}
shinyApp(ui, server)
res設(shè)置圖片大小和媳,推薦保持96格遭,這樣界面可以看起來和R一樣顯示。
Plot比較特殊留瞳,既可以是輸入窗口拒迅,也可以是輸出窗口,之后的章節(jié)會介紹如何設(shè)置成可用戶交互式圖形她倘。
1.2.4 下載文件
實現(xiàn)下載需要一些別的操作璧微,會在之后的章節(jié)里介紹。