目录
1 Basic
一个Shiny App在一个app.R里面,然后这个script在一个路径下(例:newdir/
),运行这个app使用runApp("newdir/")
。参数有display.mode = "showcase"
Shiny App由三部分组成,ui、server和shinyApp:
library(shiny)
# Define UI ----
ui <- fluidPage(
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
2 User Interface
2.1 Lay Out
使用fluidPage
函数可以创造一个适应于窗口大小的界面:
ui <- fluidPage(
)
界面可以包含一个主面板和一个侧面板:
ui <- fluidPage(
titlePanel("主面板标题"),
sidebarLayout(
positon = "right", # 默认"left"
sidebarPanel("侧面板"),
mainPanel("主面板")
)
)
高级的还有(待补):
navbarPage
:有导航栏的多页交互界面
fuidRow
和column
:网格页面
2.2 HTML Content
对应函数可以使用HTML语法:
R code | HTML code |
---|---|
p("一段话") | <p>text</p> |
h1("一级标题") | <h1>text</h1> ( h2, h3, ..., h6 ) |
a("超链接") | <a>text</a> |
br() | <br/> 空行 |
div() | <div/> 分割线 |
span(, style = "blabla: blabla; blabla:blabla") | <span>blabla</span style = "blabla: blabla"> |
pre() | <pre> 以固定宽度的字体按原样显示文本 |
code | <code> 代码 |
img(src = "", height = ) | <img> 图片 |
strong() | <strong> 粗体 |
em() | <em> 斜体 |
3 Add control widgets
3.1 Control widgets
R code | Outcome |
---|---|
actionButton() | Action Button |
checkboxGroupInput() | A group of check boxes |
checkboxInput() | A single check box |
dateInput() | A calendar to aid date selection |
dateRangeInput() | A pair of calendars for selecting a date range |
fileInput() | A file upload control wizard |
helpText() | Help text that can be added to an input form |
numericInput() | A field to enter numbers |
radioButtons() | A set of radio buttons |
selectInput() | A box with choices to select from |
sliderInput() | A slider bar |
submitButton() | A submit button |
textInput() | A field to enter text |
3.2 Adding widgets
Widgets要加在面板函数里面,参数有name = "名字"
,label = "标签"
:
library(shiny)
# Define UI ----
ui <- fluidPage(
titlePanel("Basic widgets"),
fluidRow(
column(3,
h3("Buttons"),
actionButton("action", "Action"),
br(),
br(),
submitButton("Submit")),
column(3,
h3("Single checkbox"),
checkboxInput("checkbox", "Choice A", value = TRUE)),
column(3,
checkboxGroupInput("checkGroup",
h3("Checkbox group"),
choices = list("Choice 1" = 1,
"Choice 2" = 2,
"Choice 3" = 3),
selected = 1)),
column(3,
dateInput("date",
h3("Date input"),
value = "2014-01-01"))
),
fluidRow(
column(3,
dateRangeInput("dates", h3("Date range"))),
column(3,
fileInput("file", h3("File input"))),
column(3,
h3("Help text"),
helpText("Note: help text isn't a true widget,",
"but it provides an easy way to add text to",
"accompany other widgets.")),
column(3,
numericInput("num",
h3("Numeric input"),
value = 1))
),
fluidRow(
column(3,
radioButtons("radio", h3("Radio buttons"),
choices = list("Choice 1" = 1, "Choice 2" = 2,
"Choice 3" = 3),selected = 1)),
column(3,
selectInput("select", h3("Select box"),
choices = list("Choice 1" = 1, "Choice 2" = 2,
"Choice 3" = 3), selected = 1)),
column(3,
sliderInput("slider1", h3("Sliders"),
min = 0, max = 100, value = 50),
sliderInput("slider2", "",
min = 0, max = 100, value = c(25, 75))
),
column(3,
textInput("text", h3("Text input"),
value = "Enter text..."))
)
)
# Define server logic ----
server <- function(input, output) {
}
# Run the app ----
shinyApp(ui = ui, server = server)
4 Display Reactive Output
4.1 Output in “ui” Part
Output也要加在面板函数里面
Output function | Creates |
---|---|
dataTableOutput("OutputName") | DataTable |
htmlOutput() | raw HTML |
imageOutput() | image |
plotOutput() | plot |
tableOutput() | table |
textOutput() | text |
uiOutput() | raw HTML |
verbatimTextOutput() | text |
4.2 Create Output in “server” Part
output$OutputName
就是ui里面的*Output("OutputName")
。使用render*()
来得到这些output。
input$WidgetName
就是ui里面对应widget中输入变量。
render function | creates |
---|---|
renderDataTable() | DataTable |
renderImage() | images (saved as a link to a source file) |
renderPlot() | plots |
renderPrint() | any printed output |
renderTable() | data frame, matrix, other table like structures |
renderText() | character strings |
renderUI() | a Shiny tag object or HTML |
server <- function(input, output) {
output$OutputName <- render*({
somefunction(input$WidgetName)
})
}
5 Use R Script and Data
在app文件夹里可以放helper.R
然后使用source("helper.R")
引用。在app文件夹下新建一个data文件夹,然后使用read*()
引用。
6 Reactive Expression
reactive({ })
使数据需要更新时才更新,即在*render()
函数里的数据过时或*render()
函数里input值有变化时。在reactive
与*render
函数中调用reactive expression。
7 Share Your Apps
可以分享为r script(访问者需要安装R)或者一个web。
7.1 R Script
除了runApp()
之外,还可以使用runUrl()
,runGitHub()
,runGist()
。
# install.packages("shiny")
library(shiny)
runApp("someapp")
打包zip上传到一个link可以使用runGitHub()
:
library(shiny)
runUrl( "<the weblink>")
上传Github可以使用:
runGitHub( "<your repository name>", "<your user name>")
匿名上传Github(<gist.github.com>):
runGist("<gist number>")
7.2 Web
shinyapps.io,Shiny Server,RStudio Connect