shiny包学习笔记(一)
- 认识shiny
- 第一个例子
- (01_hello)
- 认识shiny APP的构成
- 用户界面 (ui)
- 服务器功能 (server)
- shinyApp函数
认识shiny
shiny是一个R的软件包,它使得直接从R构建交互式web app更加简单。
shiny包中有11个例子,可以非常形象直观地解释shiny的工作方式。
第一个例子
(01_hello)
认识shiny APP的构成
shiny app 是包含于一个名为app.R的脚本中的,这个脚本存在于一个路径之中,例如newdir,则shiny APP可以通过`runApp(“newdir”)来运行。
app.R 共有三个部分:
- 一个用户界面 (ui)
- 一个服务器功能 (server)
- 对shiny APP的功能调用 (shinyApp)
即:
library(shiny)
ui <- ...
server <- ...
shinyApp(ui = ui, server = server)
注意:
在0.10.2版本之前,shiny并不支持单文件app,且 ui和server这两个部分的脚本需要分开编写,并保存为ui.R和server.R。shiny仍然支持这个功能,教程和大部分支持文档都将重心放在了单文件app上。
用户界面 (ui)
用户界面这一块控制着app的输出和外观。
(01_hello)的ui部分,如下:
#为绘制直方图的app定义ui界面
ui <- fluidPage(
titlePanel("Hello Shiny!"),#app的标题
#带有输出输入定义的边栏布局
sidebarLayout(
#输入的侧边面板
sidebarPanel(
#输入:箱数滑块
sliderInput(inputId = "bins",
label = "Number of bins:",
min = 1,
max = 50,
value = 30)
),
#显示输出的主面板
mainPanel(
#输出直方图
plotOutput(outputId = "distPlot")
)
)
)
服务器功能 (server)
server 则包含着计算机生成应用程序所需要的指令。
#server.R
#定义绘制直方图所需的server逻辑
server <- function(input,output){
#Old Faithful Geyser Data 的直方图
#按要求数量的箱子
#生成直方图法人表达式被包装在调用中
#renderPlot 显示:
#1. 因为是及时反应的,所以当输入(input$bins)改变时,应该自动重新执行
#2. 输出类型是plot
output$distPlot <-renderPlot({
x <- faithful$waiting
bins <- seq(min(x),max(x), length.out = input$bins +1)
hist(x,breaks = bins,col = "#75AADB",border = "white",
xlab = "Waiting time to next eruption(in mins)",
main = "Histogram of waiting times")
})
}
这个例子的server功能是非常简单的,脚本只是进行简单的运算然后就是将得到的箱数绘制成直方图。
然而,你可注意到大多数的脚本都被封装在对renderPlot的调用中。
shinyApp函数
shinyApp从UI/server中创建应用程序对象。
# 创建一个shiny app
shinyApp(ui=ui,server = server)
当shinyapp运行时,R的会话会非常繁忙,因此您可能无法运行任何R的指令。R正在监视应用程序并执行应用程序的反应。为了恢复R会话,只需要按下escape键或者单击停止图标。