Shiny入门
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。ui
和server
可以写在一个脚本里面
我们可以从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的按钮:
不仅如此,点击下拉选项,还可以选择用新的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