Shiny入门

作者: Shaoqian_Ma | 来源:发表于2020-05-22 22:38 被阅读0次

    R shiny

    官方教程在:https://shiny.rstudio.com/tutorial/

    代码海洋上的ShinyOmics:https://codeocean.com/capsule/6605476/tree 这是我最近在代码海洋codeocean网站上找到的,可以作为解析shiny的范本,不过它的server和ui是分别包装的(问题不大)

    代码海洋上有很多不同学科方向的一些paper的示例代码,有的paper比如nature communication上的会把代码公开在上面。

    另外我强烈推荐一个粉红色系的小工具:https://www.researcher-app.com/paper/4803052 它可以跟踪你感兴趣学科方向的paper

    如果对用R爬取高通量数据感兴趣,可以看看最近发布在预印本上的新款R包:SpiderSeqR: an R package for crawling the web of high-throughput multi-omic data repositories for data-sets and annotation我打算有时间把这两个项目自己操作一遍

    Structure of a Shiny App

    主要的脚本文件app.R包含的要素有:

    • a user interface object 一个用户交互界面
    • a server function 包装了所有动态展示数据的函数
    • a call to the shinyApp function 调用自己的app

    用户交互界面:The user interface (ui) object controls the layout and appearance of your app

    server是一个函数,用来构建app。uiserver可以写在一个脚本里面

    我们可以从shiny包自带的示例文件里面查看其构成:

    library(shiny)
    runExample("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")
    
        )
      )
    )
    

    一个完整的shiny代码结构如下:开头需要载入shiny包,结尾需要call一下shinyApp这个函数

    library(shiny)
    
    # See above for the definitions of ui and server
    ui <- ...
    
    server <- ...
    
    shinyApp(ui = ui, server = server)
    

    Running an App

    建议每个app.R文件放在一个新建的目录里,方便调用:

    library(shiny)
    runApp("my_app")
    

    这里my_app是app.R文件所在目录的路径,runApp这个函数和read.csv, read.table等函数类似。之前用的runExample("01_hello")说明有一个系统目录叫做01_hello,所以我们可以直接调用这个目录下的app代码

    这里我把example的app.R代码拷贝到自己的my_app目录下,并修改了bins的最小值为5,bins的颜色为orange:

    helloworld.jpg

    默认的展示是“normal” mode,之前的example中因为是showcase mode所以可以顺便显示出app.R的代码

    如果需要改成 showcase mode,可以修改一下函数的参数:

    runApp("App-1", display.mode = "showcase")
    

    如果需要调用app,除了可以用函数runApp("my_app")以外,还可以打开app.R脚本,编辑界面右上方有run app的按钮:

    Run app button

    不仅如此,点击下拉选项,还可以选择用新的studio窗口打开还是在浏览器里打开。

    总的来说,创建一个R shiny分为以下几步:

    • Make a directory named myapp/ for your app.
    • Save your app.R script inside that directory.
    • Launch the app with runApp or RStudio’s keyboard shortcuts.
    • Exit the Shiny app by clicking escape.

    Go Further

    需要创建新的属于自己的app的话,可以考虑修改已有的app模板:

    runExample("01_hello")      # a histogram
    runExample("02_text")       # tables and data frames
    runExample("03_reactivity") # a reactive expression
    runExample("04_mpg")        # global variables
    runExample("05_sliders")    # slider bars
    runExample("06_tabsets")    # tabbed panels
    runExample("07_widgets")    # help text and submit buttons
    runExample("08_html")       # Shiny app built from HTML
    runExample("09_upload")     # file upload wizard
    runExample("10_download")   # file download wizard
    runExample("11_timer")      # an automated timer
    

    更多的模板可以在Galley找到很多

    下面这个就是代码海洋上的shinyOmics,数据组织得非常好,找到项目以后,copy到自己的仓库里面,可以运行可以修改(不过运行容易出bug,建议把仓库的代码和数据完整下到本地自己捣鼓一下)

    copy_shinyOmics.jpg

    相关文章

      网友评论

        本文标题:Shiny入门

        本文链接:https://www.haomeiwen.com/subject/zqkhahtx.html