Shiny是Rstudio公司推出的构建Web交互式应用的R Package,可将自己的R程序在Shiny上搭建为交互式Web应用。有Web前端经验可快速上手。
官方教程可参考 Shiny - Tutorial
本文对一些要点进行简单记录
一、应用组成与结构
界面组成:标题Title,输入Inputs,输出Outputs
应用结构:用户界面User interface,服务器函数Server function,Shiny应用对象shinyApp()
二、注意事项
1、始终运行包含R代码的整个脚本
2、首先加载必要的包,其中包括library(shiny)
3、使用UI控件布局用户界面
4、定义包含构建应用所需的指令的服务器函数
5、在Shiny应用脚本末尾添加shinyApp()函数,以将用户界面和服务器函数整合入应用
6、每个Shiny应用都有一个用户访问的网页,后端计算机通过运行R为这个网页提供服务。在本地运行应用程序时,为应用程序提供服务的计算机就是本地计算机。部署过应用程序时,为应用程序提供服务的计算机是web服务器。
三、用户界面
1、在用户界面和服务器函数定义前加载数据:library("genes.Rdata")
2、UI界面最外层是fluidPage(),创建由行和列组成的流体页面布局。行确保其中的元素显示在同一行上。这些行中的列定义了每个元素应占据的水平空间。流体页面实时缩放其组件,以填充所有可用的浏览器宽度,非常方便。
3、使用sidebarLayout()定义应用的布局。Shiny包括许多用于布局应用程序组件的选项。
4、定义侧边栏面板中的输入控件,比如selectInput()下拉菜单
5、用户界面的最后一个成分为mainPanel(),包含Outputs内容
四、服务器函数
1、服务器函数包含两个参数:input和output,均为named lists。服务器函数可以接受另一个参数session,session是一个可用于访问与会话相关的信息和功能的环境。
2、简单的输出可以是一个图像,因此服务器函数应包含绘制此图像的命令。renderPlot() 指定了该图像输出是如何被更新的。
3、使用保存需要输出的结果,访问方式output$XX,XX为输出内容的ID。
4、始终使用render*()函数之一构建要显示的对象,比如使用renderPlot()构建图像,使用plotOutput()绘制图像。
5、Shiny提供了广泛可选的output类型。
6、反应性:Shiny使用反应式编程方案,当输入到输出发生变化时,Shiny会自动更新输出。
7、Shiny程序的最后一个组件,调用shinyApp(),将用户界面和服务器函数组成应用。
shinyApp(ui = ui, server = server)
8、runApp()函数可以在控制台中用于运行Shiny应用,作为RStudio IDE中Run App按钮的替代。
五、反应流及反应性要素
1、反应性是通过一个render*()函数将输入与输出链接起来建立的。
2、在sidebarPanel()中定义的控件使用逗号进行分隔。
3、数据加载在UI和服务器函数定义范围之外,对服务器和UI可见。
4、熟悉各种控件及render函数。
5、执行反应执行的是:reactive inputs输入,reactive expressions表达式,reactive outputs输出。反应式输入通常是通过浏览器界面进行的用户输入。反应性输出是出现在用户浏览器窗口中的内容,例如图表。一个反应式输入可以连接到多个反应式输出,反之亦然。反应式表达式是输入输出之间的组件。
6、在执行任何依赖于输入input$XX的计算之前,使用req()函数检查其可用性
7、函数与反应式表达式不同,每次调用函数时,R都会对其求值。然而,反应式表达式是懒惰的,它们只有在输入发生变化时才会被执行。这意味着,即使在应用程序中多次调用反应式表达式,它也只会在输入更改时重新执行。
8、reactlog是反应式表达式依赖关系结构的图形化表示,它还为您提供了关于Shiny评估应用程序时引擎罩下发生的事情的非常详细的信息
9、可以使用隔离操作isolate()实现更新反应的隔离,用于停止反应
10、可使用触发操作observeEvent()来显式地触发反应,用于执行响应时间的操作
11、可以使用延迟操作eventReactive()来延迟反应的发生,用于创建仅在响应事件时更新的计算值
12、反应性输入和表达式是针对其值的,observers是针对其副作用的
13、不要在render*()函数中定义reactive()函数
14、熟悉R语言中的各种tags的使用方法。