基于R语言的shiny网页工具开发基础系列-01

shiny是一个直接用R来制作交互式网页应用 (interactive web applications (apps)) 的R包

一、欢迎使用shiny

如下就是一个简单朴素的shiny app界面

只需要两行代码就能画出来,记得安装和载入shiny包哦

# install.packages("shiny")
library(shiny)
runExample("01_hello")

 

可以拖动按钮改变柱子的数量

执行 runExample()可以看到内置的11个例子,github上有更多,可以体验和学习这些例子

rstudio/shiny-examples

runExample()
# Valid examples are "01_hello", "02_text", "03_reactivity", 
# "04_mpg", "05_sliders", "06_tabsets", "07_widgets", "08_html", "09_upload", 
# "10_download", "11_timer"

1.Shiny app的结构

一个shiny app分三个部分

  • 一个用户界面对象

    用户界面(ui)对象控制app的输出和外观

  • 一个server函数

    server 函数包含让计算机构建app的指令

  • 调用shinyApp函数

    最后,shinyApp 函数根据上面的那对uiserver创建一个shinyApp 项目

library(shiny)
# 一个用户界面对象
ui <- fluidPage()
# 一个服务函数
server <- function(input, output) {}
# 调用shinyApp函数
shinyApp(ui = ui, server = server)

可以看看上面 01_hello 的脚本内容

ui 部分

library(shiny)

# Define UI for app that draws a histogram ----
ui <- fluidPage(

# App title ----
  titlePanel("Hello Shiny!"),

# Sidebar layout with input and output definitions ----
  sidebarLayout(

# Sidebar panel for inputs ----
    sidebarPanel(

# Input: Slider for the number of bins ----
      sliderInput(inputId = "bins",
                  label = "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30)

),

# Main panel for displaying outputs ----
    mainPanel(

# Output: Histogram ----
      plotOutput(outputId = "distPlot")

)
  )
)

server 函数部分

# Define server logic required to draw a histogram ----
server <- function(input, output) {

# Histogram of the Old Faithful Geyser Data ----
  # with requested number of bins
  # This expression that generates a histogram is wrapped in a call
  # to renderPlot to indicate that:
  #
  # 1. It is "reactive" and therefore should be automatically
  #    re-executed when inputs (input$bins) change
  # 2. Its output type is a plot
  output$distPlot <- renderPlot({

x    <- faithful$waiting
    bins <- seq(min(x), max(x), length.out = input$bins + 1)

hist(x, breaks = bins, col = "#75AADB", border = "white",
         xlab = "Waiting time to next eruption (in mins)",
         main = "Histogram of waiting times")

})

}

这个脚本相对简单且有详细的注释,做一些计算然后画成对应柱子数量的直方图

其中renderPlot 包含了大部分脚本,之后会详细解释,目前看不懂也没关系

试试把上面两块拼进一个shiny app的app.R脚本,记住要以library(shiny) 开头,调用shinyApp()结尾

library(shiny)

# See above for the definitions of ui and server
ui <- ...

server <- ...

shinyApp(ui = ui, server = server)

2.启动一个app

每个app的结构都一样,一个 app.R 文件包含 uiserver. 通过新建一个文件夹📁(例如(my_app)),并把app.R存入这个文件夹(通常一个app用一个专属的文件夹),然后把文件夹的名字作为参数给到runApp

library(shiny)
runApp("my_app")

runApp和其他R中的许多函数(read.csv, read.table)一样,第一个参数的是从工作目录到app的目录的文件路径,以上代码假设my_app文件夹包含在你的工作路径,因此,只需要输入文件夹的名字

当shiny app启动后,R的会话框会变成忙碌状态,不能运行任何其他代码,R会监控app并处理app的反应。会话框的右上角的红色stop可以停止进程

3. 改改代码练习一下

在工作目录创建一个新的文件夹App-1,用上面的代码创建一个app.R,看起来像这样

 

# 输入命令启动一下看看
runApp("App-1")

终止app并尝试做如下更改

1.把标题从 “Hello Shiny!” 改成 “Hello World!”.

2.设置滑块的最小值为5

3.把直方图的边框颜色从白色改成黄色

改好了看看能否出现下面的结果吧,我成功了哦

 

默认情况下,app以"normal"模式展示,就像上图一样。

内建的例子以"showcase mode"模式展示,会将app.R展示在app界面的一旁

你也可以用这种模式,通过这个命令,runApp("App-1", display.mode = "showcase")

结果是这样的

在Rstudio里面,会自动识别Shiny app 脚本,显示一个Run App 的按钮,如图,快捷键是Command+Shift+Enter (Windows: Control+Shift+Enter)
 

点击灰色的向下展开小箭头还有更多惊喜哦

一个个点点看

 

5.回顾一下怎么创建一个app

  1. 创建一个以myapp为名的路径(文件夹)
  2. 保存app.R到myapp文件夹中
  3. 使用runApp函数或者Rstudio的按钮启动app
  4. 通过点击叉叉或者stop退出app

下一节将开始了解app的每一个部分

Reference:

Shiny - Welcome to Shiny

(0)

相关推荐

  • MasteringShiny1.3 基础反应性Basic Reactivity

    今天我们学习第一章的第三节.本节我们学习基础的反应式编程,有许多概念性的内容,但能加深我们对Shiny的理解. 第三节, Basic reactivity 1. 简要介绍 本节将对反应式编程做一个温和 ...

  • 一个好用的Visual Studio Code扩展 - Live Server,适用于前端小工具开发

    Jerry 平时在写一些简单的 SAP UI5 应用时,喜欢从这篇文章里介绍的脚手架应用作为模板,开始编程: 一个用于SAP UI5学习的脚手架应用,没有任何后台API的依赖 上面这篇文章的SAP U ...

  • Appium原理与安装 | 白月黑羽教Python

    本教程讲解如何使用Appium进行手机应用的自动化. 学习本课程前,强烈推荐先学习 Selenium Web 自动化课程 Appium 用途和特点 点击这里,边看视频讲解,边学习以下内容 Appium ...

  • 基于R语言的shiny网页工具开发基础系列-07

    任何使用R的人都可运行你的shiny app,他们需要你的app.R的一个副本,还有其他支持材料(比如www文件夹或者帮助脚本) 发送你的文件到另一个用户,email或者github等 用户将你的文件 ...

  • 基于R语言的shiny网页工具开发基础系列-06

    L6-反应表达式 用反应表达式,快速构建,模块化app ⚠️此篇的线上数据可能有时无法顺利抓取,要多试几次 使用反应表达式 用户会赞叹快速的app,但是你的app有大量运算影响速度了该怎么办呢? 此篇 ...

  • 基于R语言的shiny网页工具开发基础系列-05

    l5-更复杂的反应app 创建一个更复杂的依赖R脚本和额外数据的有灵魂的(能反应的)app 使用R脚本和数据 此篇旨在展示如何载入数据,R脚本,包,用来构建app. 构建一个复杂的数据,可视化美国的人 ...

  • 基于R语言的shiny网页工具开发基础系列-04

    l4-反应输出 了解小工具如何和反应输出联系,反应输出即无何时用户改变小工具都会自动更新的对象 展示反应输出 是时候给app注入灵魂了,此篇介绍如何构建一个反应输出在app中展示. 只要用户触发小工具 ...

  • 基于R语言的shiny网页工具开发基础系列-03

    l3-更复杂的页面部件 shiny 小部件提供了一个用户给app传送信息的方式 为什么加上控制小工具 上节已经学会在用户界面放置一些简单的元素,但显示更复杂的内容需要用到小部件widgets widg ...

  • 基于R语言的shiny网页工具开发基础系列-02

    l2-shiny的页面布局 基于上篇对shiny app 结构的了解 是时候开始从零构建一个shiny app了 二.构建一个用户界面 此篇旨在如何构建app对用户界面,如何布局用户界面然后加文字图片 ...

  • 基于R语言的shiny网页工具开发小技巧系列-08

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...

  • 基于R语言的shiny网页工具开发小技巧系列-07

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...

  • 基于R语言的shiny网页工具开发小技巧系列-06

    六年前还在上海工作的时候,机缘巧合接触了使用R语言的shiny体系搭建网页工具的技术,就一直身体力行的在我们生物信息学圈子里面推广它. 自己一个人能做的很有限,很庆幸这些年有各式各样的小伙伴加入我们& ...