【冰糖R语言】Shiny简单笔记

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的使用方法。

你可能感兴趣的:(R,r语言)