前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「R」Shiny 教程笔记

「R」Shiny 教程笔记

作者头像
王诗翔呀
发布2021-04-07 00:14:01
6.7K0
发布2021-04-07 00:14:01
举报
文章被收录于专栏:优雅R

整理之前在知识星球打卡汇总的 Shiny 笔记,作为速学、速查使用和分享。

基于 https://shiny.rstudio.com/tutorial/ 视频而非文字教程写的笔记。

p1:初识 UI 和 Server

UI 主要目的是创建展示界面。Server 主要目的是创建和管理服务逻辑。

p2:输入与输出

Inputs 是与用户交互的组件,用户获取用户输入。Outputs 是 Shiny 通过响应用户输入而在指定区域展示的输出,一般为图表。每个输入组件都有唯一标识符,需要展示的标签名作为参数,其他一些参数则应不同组件提供的不同功能而不同。每个输出组件也有它的唯一标识符。当在 UI 插入一个输出组件后,会自动分配一块空间用于展示,但展示的生成和逻辑都在服务端完成。

p3:Server

server:集成输入生成输出。3 个步骤要点:

  1. 要展示的对象设置为 output 元素,如 output$hist
  2. 通过 render* 函数生成要展示的元素。
  3. 通过 input$xx 使用来自 UI 的输入。

p4:分享 Shiny

将所有脚本和材料保存到一个目录,目录下代码通常以以下 2 种方式之一存储:

  • app.R
  • ui.R & server.R

p5:Shinyapps.io

一个 RStudio 公司开发的用来部署 Shiny 的网站,URL shinyapps.io。每个人每个月有一定的免费额度。

  • 用来部署的工具:GitHub - rstudio/rsconnect: Publish Shiny Applicat...
  • 安装方式:install.packages("rsconnect")
  • 文档:Shiny - Shinyapps.io - Getting started

p6:Shiny Server

Shiny server: 在自己的 linux 服务器上管理和部署 shiny 的软件 Download Shiny Server - RStudio更多 shiny 内容:Shiny最后就是复习,第一部分总的下来是非常简单的,主要是了解整个 shiny 怎么工作的,大体有哪些组件。

p7:响应式编程

响应式编程:当输入改变时,输出根据逻辑会自动进行所需要的运算,对结果值更新。值得注意的是,虽然我们在编写 Shiny 程序时还是按照顺序的流程编写,但实际上不同的表达式对于 Shiny 本身而言是没有顺序的

p8:响应值(reactive values)

响应值就是 Shiny 中的数据流,input 是响应值的列表,这些值展示了当前输入的各自状态。注意⚠️:响应值只能在对应的设定好的响应环境中使用!

p9:reactive 工具集

  • render* 函数构建 shiny app 中要显示的对象。
  • 它会将结果保存到 output 对应的元素中。
  • render* 函数创建一个 observer 对象,它关联了生成上述结果的代码块。
  • 当输入发生改变时,上述代码块会被重新运行,生成新的结果。

需要注意⚠️的是,当多个输入在同一个代码块中时,修改一个参数会更新全部的参数,在一般情况下没有问题,但如果涉及随机数就会影响整个结果。例如讲解视频中的例子,当修改图标题时,代码重新运行,而数据来自随机函数,随机函数被重新执行,最终效果是不仅仅图标题改变了,生成的数据也发生了改变。

(这里如果修改 title,整个结果都会发生改变)

p10:使用 reactive 表达式模块化 Shiny

回顾上一部分的学习中,当多处使用同一随机数据时,不同地方的数据将变得不一致。为了解决这个问题,也为了解决代码重复,Shiny 里提出了响应表达式,其构造函数为 reactive()。当表达式被传入该函数中,将生成响应表达式, 有趣的是,当使用一个响应表达式时,我们需要在其符号后加括号,像函数一样对待它。例如, data <- reactive({xxx}),后续使用 data() 使用它。

p11:使用 isolate() 隔离响应表达式

如何在不更新图的情况下更新标题呢?这就需要使用 isolate() 了。

  • isolate() 创建一个非响应对象(看作 R 常规值)。
  • 它和 reactive() 是对应的。

(注意这里虽然图更新了,但绘图数据并没有更新)

p12:使用 observeEvent 进行事件触发

有时候我们需要做一些按按钮才进行分析或者绘图的触发操作,在前端我们可以使用 actionButton,在服务端我们需要使用 observeEvent() 触发相应的工作代码。除了 observeEvent()observe 也可以用来进行触发,它更加底层,只需要输入一个表达式,表达式内部的响应值都将被监测,当有任何值改变时,整个表达式将重新执行。

p13:使用 eventReactive() 进行延迟响应

除了直接使用 observeEvent() 响应按键的更新,我们还可以使用 eventReactive() 依据按键创建一个响应值,然后复用这个响应值对结果进行更新。

p14:使用 reactiveValues() 管理状态

input 是无法修改的,我们可以通过 reactiveValues() 来生成一个列表,管理响应值的状态,包括修改。

p15:分离技巧

即如何减少重复代码,模块化。

可以阅读文章 https://shiny.rstudio.com/articles/understanding-reactivity.html 理解响应式编程。

p16:处理 HTML 页面

HTML 构建了 Shiny 的展示界面,所有的 Shiny 前端函数结果其实都被转换为 HTML。

p17:添加静态内容

通过 shiny 提供的 tags$ 函数添加 HTML 元素。命名参数表示 HTML 元素属性,非命名参数表示元素内容。列表见:https://shiny.rstudio.com/articles/tag-glossary.ht...另外, HTML() 可以包裹原生的 HTML 文本。如果需要在本地存放资源,如图片,需要放置到 www 目录下。

p18:创建布局

通过将页面划分为网格状,从而控制布局。

  • fluidRow() 创建行。
  • column() 创建列。每个新增的列都会对齐到左侧的列。页面总宽度为12,offset 可以设置偏移量。

如果要在网格布局中添加元素,只需要将元素当作参数传入即可。

p19:组合仪表盘

仪表板,即 panel,将多个 HTML 元素组装为带有属性的独立单元。

  • wellPanel: 一个适当的仪表板。
  • tabPanel: 带有独立的页面仪表板,一般与其他的 panel 组合使用,如 tabsetPanel。
  • tabsetPanel: 将多个标签组合为单个的仪表板。

相关指南:Shiny - Application layout guide

p20:使用预先封装的布局

  • sidebarLayout(): 带侧边栏的布局。
  • fixedPage(): 创建固定宽高的页面。
  • navbarPage(): 带多个标签页的页面布局。
  • navbarMenu(): 创建多个标签页的下拉栏。
  • shinydashboard 包提供的 dashboardPage() 提供了仪表盘页面 Shiny Dashboard。

p21:使用 CSS 设置风格

CSS,即层叠样式表提供了自定义网页中元素布局的框架。

Shiny 使用的是 Bootstrap 3 CSS 框架。

  • 外部 css 文件应当放在 www 目录下,然后放到 header 部分进行链接。
  • 联合 tags$style()HTML() 手动写 CSS;或使用 includeCSS()
  • 在写网页元素时单独设置 style 属性。

完结拉!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • p1:初识 UI 和 Server
  • p2:输入与输出
  • p3:Server
  • p4:分享 Shiny
  • p5:Shinyapps.io
  • p6:Shiny Server
  • p7:响应式编程
  • p8:响应值(reactive values)
  • p9:reactive 工具集
  • p10:使用 reactive 表达式模块化 Shiny
  • p11:使用 isolate() 隔离响应表达式
  • p12:使用 observeEvent 进行事件触发
  • p13:使用 eventReactive() 进行延迟响应
  • p14:使用 reactiveValues() 管理状态
  • p15:分离技巧
  • p16:处理 HTML 页面
  • p17:添加静态内容
  • p18:创建布局
  • p19:组合仪表盘
  • p20:使用预先封装的布局
  • p21:使用 CSS 设置风格
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档