Shiny包可以快速搭建基于R的交互网页应用。对于web的交互,之前已经有一些相关的包,不过都需要开发者熟悉网页编程语言(html,CSS,JS)。
Shiny包的特点在于不需要了解网页语言,用纯R来搭建。生成的网页应用是动态交互、即时更新的。Shiny还提供了现成组件方便快速在网页上展示数据、图表和模型。
可下载资源
通过交互网页应用,你可以
1) 不需要安装任何程序, 携带数据, 只要有网的地方, 你就能演示。(远程)
官方教程:https://shiny.rstudio.com/tutorial/
中文教程:http://yanping.me/shiny-tutorial/
英文教程:https://deanattali.com/blog/building-shiny-apps-tutorial/
Shiny是一个R包,使用它可以很容易构建交互式web应用程序。
1. 入门
Hello Shiny是个简单的应用程序, 这个程序可以生成正态分布的随机数,随机数个数可以由用户定义,并且绘制这些随机数的直方图。
1
2
|
library (shiny)
runExample ( "01_hello" )
|
Shiny Text这个应用程序展示的是直接打印R对象,以及用HTML表格展示数据框。
更多示例:
"01_hello", "02_text", "03_reactivity", "04_mpg", "05_sliders", "06_tabsets", "07_widgets", "08_html", "09_upload", "10_download", "11_timer"
分别向我们演示了:
示例 | 输入形式 | 输出形式 |
01_hello # a histogram | 滑动条输入(sliderInput) | 图形输出(plotOutput) |
02_text # tables and data frames | 选择输入(selectInput) | 表格输出(tableOutput) |
03_reactivity# a reactive expression | 文本输入(textInput),数字输入(numericInput) | 反应式(标题h3) |
04_mpg # global variables | 复选框输入(checkboxInput) | |
05_sliders # slider bars |
滑动条输入 (数值类型、范围、步长、双取值、符号标示、动画) |
|
06_tabsets # tabbed panels | 单选按钮(radioButtons) | 标签页(tabsetPanel) |
07_widgets # help text and submit buttons | 帮助信息(helpText),动作按钮(actionButton) | verbatimTextOutput |
08_html # Shiny app built from HTML | HTML样式 | |
09_upload # file upload wizard | 文件输入(fileInput) | |
10_download # file download wizard | 文件输出(downloadButton) | |
11_timer # an automated timer | 时间输出 |
在shiny中使用反应值时,最常见的方式是使用input
对象。input
对象会被传递给shinyServer
函数中,让我们可以用类似列表的语法来访问网页上的输入值。为了将反应值转化为可以在网页上呈现的输出,我们要将它们赋值给output
对象(同样传递给shinyServer
函数)。
input values => R code => output values
创建:
2. 运行&调试
服务端脚本给两个输出赋值:output$caption
和output$mpgPlot
。为了让用户接口能显示输出,我们需要在主UI面板上添加相应的元素。
打印
1
2
|
cat ( "foo\n" )
cat ( "bar\n" , file= stderr ())
|
调试浏览器
1
2
|
# Always stop execution here
browser ()
|
1
2
|
# Stop execution when the user selects "am"
browser (expr = identical (input$variable, "am" ))
|
错误处理器
1
2
|
# Immediately enter the browser when an error occurs
options (error = browser)
|
1
2
|
# Call the recover function when an error occurs
options (error = recover)
|
3. HTML元素
shiny function | HTML5 equivalent | creates |
---|---|---|
p
|
<p>
|
段落 |
h1
|
<h1>
|
一级标题 |
h2
|
<h2>
|
二级标题 |
h3
|
<h3>
|
三级标题 |
h4
|
<h4>
|
四级标题 |
h5
|
<h5>
|
五级标题 |
h6
|
<h6>
|
六级标题 |
a
|
<a>
|
链接 |
br
|
<br>
|
换行 |
div
|
<div>
|
容器 |
span
|
<span>
|
内联文本 |
pre
|
<pre>
|
格式字体 |
code
|
<code>
|
代码块 |
img
|
<img>
|
图片 |
strong
|
<strong>
|
粗体 |
em
|
<em>
|
斜体 |
HTML
|
直接将字符串作为HTML代码传递 |
使用HTML定义前端不需要ui.R文件,由index.html文件定义即可。
4. 输入
function | widget |
---|---|
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 |
5. 输出
Output function | Creates |
---|---|
dataTableOutput
|
DataTable |
htmlOutput
|
raw HTML |
imageOutput
|
image |
plotOutput
|
plot |
tableOutput
|
table |
textOutput
|
text |
uiOutput
|
raw HTML |
verbatimTextOutput
|
text |
2) 只要安装一次, 可以多人使用, 可以让别人试用。(多用户)
3) 不用担心软件或者代码泄密, 可以控制用户使用时间和权限。 (服务)
4) 通过交互式操作,在数据分析中减少重复的工作如调整参数等。(交互)
组成
Shiny应用包含连个基本的组成部分:一个是用户界面脚本(a user-interface ),另一个是服务器脚本(a server )。
Shiny还有很多有用的控件,如下图所示:
基本框架
案例一:智能电表数据交互网页应用
部分实现功能:
1,当输入用户ID之后, 显示此用户的一天的所有用电量数据。
2,当输入用户ID之后, 显示用户当月及上个月的用电量。
3,当输入用户ID以后,显示一年的用电量(分为四个季节)。
案例二:银行贷款数据交互网页应用
部分实现功能:
1,实现机构贷款数据的读取。
2,浏览数据的基本概况。
3,对数据进行条件筛选基本可视化及输出。
项目主页及更多分享:http://www.open-open.com/lib/view/home/1403269290559