传送门
Shiny基础教程:
- 「R shiny 基础」初识Shiny
- 「R shiny 基础」如何进行网页布局
- 「R shiny基础」增加一些小控件
- 「R shiny基础」交互式入门
- 「R shiny基础」在shiny应用中加载数据和脚本
- 「R shiny基础」reactive让shiny应用运行速度变快
- 「R shiny基础」使用shinyapp分享你的Shiny应用
简介
shiny一个能够方便构建交互式网页应用的R包,在这一部分我们将会开始学习如何搭建一个Shiny应用。
如果你还没有安装Shiny的话,那么你需要打开R语言(显然,你需要联网)
install.packages("shiny")
案例
Shiny 提供了7个内置案例方便你熟悉shiny的不同属性,了解shiny如何工作。并且每个案例都是完全独立的shiny应用。让我们先从Hello Shiny这个例子开始,了解如何用R的faithful
数据集绘制一个直方图。用户可以选择直方图中每个分箱的大小,并且实时得到反馈。
library(shiny)
runExample("01_hello", port=9999, host="0.0.0.0")
随后那么你就可以通过服务器的IP地址加端口号访问这个应用。
Shiny应用的架构
一个简单的Shiny应用只需要一个app.R
脚本,一般放在一个项目文件夹下,例如newdir/app.R
, 那么运行的方式为, runApp("newedir")
.
app.R
包括三个部分
- 一个用户交互(UI)对象: 负责对网页进行布局
- 一个服务端(server)函数: 服务器端处理数据
- 一个
shinyApp
函数
Shiny 0.10.2之前,Shiny不支持单文件应用,ui对象和server函数需要单独放在
ui.R
和server.R
中。
UI
如下是案例Hello Shiny的ui
对象代码
library(shiny)
# 定义柱状图的交互界面
ui <- fluidPage(
#标题
titlePanel("Hello Shiny!"),
# 侧边栏,包含输入和输出的定义
sidebarLayout(
# 输入的侧边栏
sidebarPanel(
# 输入:关于bin的数目
sliderInput(inputId = "bins",
label = "Number of bins:",
min = 1,
max = 50,
value = 30)
),
# 展示输出的界面
mainPanel(
# 输出: 柱状图
plotOutput(outputId = "distPlot")
)
)
)
sever
如下是案例Hello Shiny的server
函数
# 定义绘制柱状图的代码逻辑
server <- function(input, output) {
# 代码逻辑:
# 用户选择不同的bin,产生不同的柱状图
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")
})
}
代码很简洁,基本就是等待用户提供一个输入,然后返回一个输出, 和普通的R脚本没有多大区别,唯一区别就是代码是嵌套在reanderPlot
函数里面。
运行一个新的Shiny应用
每一个shiny应用都有相同的结果: 一个app.R
包含ui
和server
. 你可以新建一个文件件,然后把app.R
放在里面,然后打开一个R终端,按照如下方式运行
library(shiny)
runApp("my_app") # my_app应该替换成你的应用文件夹名
复习
这一片文章主要是根据一个简单的Shiny应用了解Shiny的结构和创建过程。分为如下步骤
- 新建一个项目文件夹
- 在文件夹中编辑
app.R
- 使用
runApp
启动应用 - 使用ctrl+c关闭应用