前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于R语言的shiny网页工具开发基础系列-01

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

作者头像
生信技能树
发布2021-02-03 16:02:48
2K0
发布2021-02-03 16:02:48
举报
文章被收录于专栏:生信技能树

后起之秀奔涌而至,欢迎大家在《生信技能树》的舞台分享自己的心得体会!

上面是shiny团队的稿件

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

一、欢迎使用shiny

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

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

代码语言:javascript
复制
# install.packages("shiny")
library(shiny)
runExample("01_hello")

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

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

rstudio/shiny-examples

代码语言:javascript
复制
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 项目
代码语言:javascript
复制
library(shiny)
# 一个用户界面对象
ui <- fluidPage()
# 一个服务函数
server <- function(input, output) {}
# 调用shinyApp函数
shinyApp(ui = ui, server = server)

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

ui 部分

代码语言:javascript
复制
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 函数部分

代码语言:javascript
复制
# 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()结尾

代码语言:javascript
复制
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

代码语言:javascript
复制
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,看起来像这样

代码语言:javascript
复制
# 输入命令启动一下看看
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

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

本文分享自 生信技能树 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、欢迎使用shiny
    • 1.Shiny app的结构
      • 2.启动一个app
        • 3. 改改代码练习一下
          • 5.回顾一下怎么创建一个app
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档