Shiny 官方教程中文版 2015/2/11
Shiny 学习
说明:
1. 此中文版 Shiny 教程以 RStudio 官网教程为蓝本,原版教程的链接是:
http://shiny.rstudio.com/tutorial/
2. 此翻译目的仅出于个人兴趣,并非官方的标准翻译;
3. 水平与时间皆有限,翻译教程肯定存在很多不准确之处,欢迎将指导意见与
建议发送至我的邮箱(邮箱请见下方);
4. 个人认为:Shiny 是一款很强大的 R 包,热爱 Shiny,才会进行这次翻译,希
望能够有 R 语言爱好者共同努力、共同参与,将更多优秀的 R 语言文档进行
翻译与推介;
5. 转载或使用此份中文版 Shiny 教程请注明出处。
译者:
罗晨(LUO Chen 新浪微博:@罗晨_Scorpion)
中国传媒大学 2011 级传播学(媒体市场调查与分析方向)
邮箱:luochen19941112@foxmail.com
校对者:
冷雪(LEN Xue 新浪微博:@冷雪_Sharon)
中国传媒大学 2011 级媒体创意
目 录
Shiny 学习.......................................................... 1
课程 1-欢迎来到 Shiny................................................ 3
课程 2-构建一个用户界面 ............................................. 9
课程 3-添加控制部件(widgets) ..................................... 18
课程 4-响应式输出 .................................................. 22
课程 5-使用 R 脚本与数据 ............................................ 27
教程 6-使用响应式表达式 ............................................ 34
课程 7-分享你的应用 ................................................ 39
1 of Page 43
Shiny 官方教程中文版 2015/2/11
Shiny 是一个 R 语言中的网络应用程序框架,可以将你的数据分析变成互动
性的网络应用(web apps),上手不需要具备 HTML、CSS 或 JavaScript 的相关知
识。
谁应该学习 Shiny 教程?
如果你已掌握 R 语言编程,但还不了解 Shiny,那么你会在阅读本教程后获
益匪浅。
如果你刚刚接触 R 语言,那么在学习本教程之前推荐给你的基础学习资源有
www.rstudio.com/training。如果你不确定是否准备好学习 Shiny,那么请点击
链接进行测验(http://shiny.rstudio.com/tutorial/quiz/ )。
如果你在日常工作和学习中已经使用到 Shiny,那么你可能会想要跳过本教
程,访问开发中心(Development Center)的文章(Article)部分
(http://shiny.rstudio.com/articles/ ) 。在文章部分,有涵盖各种高水平
的 Shiny 应用专题。
开始 Shiny
这 7 个课程将把你从 R 编程者带入到 Shiny 开发者的领域。每个课时大约 20
分钟,讲授一项新的 Shiny 技能。到课程结束之时,你将会知晓如何建立和部署
一个属于你自己的 Shiny 应用程序。
课程清单
课程 1-欢迎来到 Shiny
课程 2-用户界面(user interface)布局
课程 3-添加控制组件
课程 4-响应式(reactive)输出
课程 5-使用 R 脚本和数据
课程 6-使用响应式(reactive)表达式
课程 7-分享你的应用(apps)
2 of Page 43
Shiny 官方教程中文版 2015/2/11
课程 1-欢迎来到 Shiny
Shiny 是一个 R 包,它让通过 R 语言建立互动性网络应用(apps)变得更加
简洁,本课程将立刻让你着手进行 Shiny 应用的构建。
如果你尚未安装 Shiny 包,请新建一个 R 任务,并连接网络,在控制台执行
以下代码:
>install.packages("shiny")
本课程以 RStudio 集成开发环境为基础,请点击
http://www.rstudio.com/ide/download/preview 下载 RStudio。
示例
Shiny 包中内置了 11 个示例,详细地展现 Shiny 的基本特性。每一个示例都
是一个独立的应用程序(self-contained Shiny app)。
Hello Shiny 示例根据 R 的 faithful 数据集绘制一个直方图,并且由可变数
量的 bins 进行操控。用户可以通过滑动条更改 bins 的数量,应用会立刻对更改
动作做出响应。你可以使用 Hello Shiny 来探索一个 Shiny 应用的结构并且创造
属于你的第一个应用程序。
执行 Hello Shiny,键入:
>library(Shiny)
>runExample(“01_hello”)
Shiny 应用的结构
Shiny 应用包含两个基本的组成部分:
一个用户界面脚本(a user-interface script)
一个服务器脚本(a server script)
用户界面(ui)脚本控制应用的布局与外表。它定义在一个称作 ui.R 的源脚
本中。在 Hello Shiny 的示例中,ui.R 的脚本如下:
library(shiny)
# Define UI for application that draws a histogram
3 of Page 43
Shiny 官方教程中文版 2015/2/11
shinyUI(fluidPage(
#Application title
titlePanel("Hello Shiny!"),
#sidebar with a slide input for the number of bins
slidebarLayout(
slidebarPanel(
slideInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30)
),
#Show a plot of the generated distribution
mainPanel(
plotOutput("distPlot")
)
)
))
Server.R 脚本包含建构应用所需要的一些重要指示,Hello Shiny 示例的
server.R 的脚本如下:
library(shiny)
# Define server logic required to draw a histogram
shinyServer(function(input, output) {
# Expression that generates a histogram. The expression is
# wrapped in a call to renderPlot to indicate that:
#
# 1) It is "reactive" and therefore should re-execute automatically
# when inputs change
# 2) Its output type is a plot
output$distPlot <- renderPlot({
x <- faithful[, 2] # Old Faithful Geyser data
bins <- seq(min(x), max(x), length.out = input$bins + 1)
# draw the histogram with the specified number of bins
hist(x, breaks = bins, col = 'darkgray', border = 'white')
})
})
在某种程度上,Hello Shiny 中的 server.R 脚本非常简单。脚本进行了一些
基础运算然后根据 bins 数量绘制直方图。
4 of Page 43
Shiny 官方教程中文版 2015/2/11
然而,你也许会注意到脚本中很大部分包裹在 renderPlot 中。以上脚本中
的注释解释了一些 renderPlot 的功能,但如果你还是存有疑惑,不必担心。我
们会在后续课程中详细介绍这一概念。
多操作 Hello Shiny 应用,然后反复浏览源代码。努力培养对应用程序工作
流程的思维感觉。
当 Hello Shiny 应用在运行的时候,你的 R 处于繁忙状态,因此你不能执行
别的 R 命令。若是希望恢复自己的 R,点击退出或者单击停止符号(停止符号在
Rstudio 控制面板的右上角)。
运行一个应用
每一个 Shiny 应用都拥有相同的结构:存放在一个目录中的两个 R 脚本。最
低要求是:一个 Shiny 应用有一个 ui.R 文件和一个 server.R 文件。
你可以在一个目录中保存一个 ui.R 文件和 server.R 文件来创建一个 Shiny
应用。每一个应用都需要自己独特的存放目录。
运行应用的方法是在函数 runApp 中置入目录名称。例如你的应用存放的目
录名称为 my_app,那么键入以下代码可以执行应用:
>library(shiny)
>runApp("my_app")
注意:runApp 与 read.csv、read.table 以及 R 中其他的一些命令类似。
runApp 中的第一个参数是从你的工作目录到应用存放目录的一个文件路径。以
上的代码假设 my_app 是一个相对路径。在这一情况下,文件路径与目录名称相
同。
(以免你会疑惑,Hello Shiny 应用中的文件存放在一个特殊的系统目录
"01_hello"中。这个目录可以直接通过 runExample ("01_hello")来予以调用。)
尝试
在你的工作目录下创建一个名为"App-1"的目录。然后复制粘贴 Hello Shiny
中两个脚本的代码到自己的文件目录中。当你完成这一步操作后,你的目录状态
应该如下:
5 of Page 43
Shiny 官方教程中文版 2015/2/11
通过输入"runApp("App-1")"来运行你的应用,然后点击退出并对自己的应
用作如下更改:
将标题从"Hello Shiny!"改为"Hello World!"。
将滚动条的最小值设置为 5.
将直方图颜色由"darkgray"改为"skyblue"。
当你完成后,再次运行你的应用。你的新应用显示应该如下图所示。
默认情况下,Shiny 应用采用"normal"模式显示,恰如以上应用截图所示。
Hello Shiny 和其他内置的例子的展示都采用"showcase model",这是一种不同
的展示模式。
如果你希望自己的应用也以 showcase 模式进行展示,可以执行如下命令:
runApp("App-1",display.mode = "Showcase").
重新运行应用
重新运行运用的方法有两种:
一种是执行 runApp("App-1")命令,另外一种是
在 Rstudio 编辑器中打开 ui.R 或者 server.R 脚本,Rstudio 会自动识别
Shiny 脚本并且提供一个 Run App 的按钮(在编辑器右上角)。你既可以点击
按钮进行执行操作,也可以使用键盘快捷键:Command+Shift+Enter on iOS,
Control+Shift+Enter on Windows.
6 of Page 43
Shiny 官方教程中文版 2015/2/11
默认情况下,Rstudio 会在新窗口中运行应用,但是你也可以对展示窗口进
行设置,在上图 Run App 的按钮右边,可以进行选择,一共有三种展现形式。
扼要重述
创建自己的 Shiny 应用,你需要:
为自己的应用建立一个目录;
在你的目录下保存 server.R 和 ui.R 脚本;
通过 runApp 或者快捷键来运行应用;
通过点击 escape 退出 Shiny 应用。
内容拓展
你可以通过复制和更改现有的 Shiny 应用来创建自己的 Shiny 应用。Shiny
Gallery(http://shiny.rstudio.com/gallery )提供很多好例子,或者可以使
用下列 11 种预建的 Shiny 示例。
system.file("examples", package="shiny")
7 of Page 43
Shiny 官方教程中文版 2015/2/11
runExample("01_hello") # a histogram
runExample("02_text") # tables and data frames
runExample("03_reactivity") # a reactive expression
runExample("04_mpg") # global variables
runExample("05_sliders") # slider bars
runExample("06_tabsets") # tabbed panels
runExample("07_widgets") # help text and submit buttons
runExample("08_html") # Shiny app built from HTML
runExample("09_upload") # file upload wizard
runExample("10_download") # file download wizard
runExample("11_timer") # an automated timer
8 of Page 43