网页开发,尤其是交互式动态网页的开发,是有一定门槛的,如果你有一定的R基础,又不想过深的接触PHP和MySQL,那R的shiny就是一个不错的选择。

现在R shiny配合R在统计分析上的优势,可以做出非常优秀的科学网站,但我见过的shiny还是多用于本地网站搭建,因为不是每个实验室都能拿出大量的财力来构建公共的网站的,而且很容易造成计算资源的浪费,R shiny则充分利用了个人计算机的优势,只要安装了基本包,就可以运行shiny网站。

现在我的需求是:

一个填表网站,属性固定,我需要一行一行的输入。

还要有查重的功能,已经录入的提示不需要再录入。

提示我那些还没有录入,我再一个一个的填入(覆盖功能)。

最后做一个基本的统计图表。

过滤查找功能,提取感兴趣的数据。

这肯定可以用Excel做,但缺点是:

1. 不易更新;

2. 不易去重;

3. 不易过滤;

4. 不易发表;

4. 时间越久表格越混乱;

参考文章:

Learn Shiny - 官网教程

Mimicking a Google Form with a Shiny app

我的 Shiny 入门学习笔记 - 生信菜鸟团

网站结构设计:

1. 输入一个需要定期更新的table1,里面包含我们现在所有的信息,把“run”作为table的key;

2. 初始化一个输出table2,我们填写的值需要不断地填入,留一个overwrite的功能;

3. 输出一个提示table3,哪些数据我们还没有整理,与table2同步更新;

4. 部署到网上,www.shinyapps.io

注:

显然table3要放在主页,因为我要用它来填表,输入放在底下;

table2放在分页,底下再显示基本的统计信息,基本的柱状图就行;

Shiny的建站逻辑

任何一个shiny网站都包含三个部分:ui, server, shinyApp.

library(shiny)

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

The user interface (ui) object controls the layout and appearance of your app.

The server function contains the instructions that your computer needs to build your app.

Finally the shinyApp function creates Shiny app objects from an explicit UI/server pair.  

交互式的网页逻辑很清楚:

在网页上,我需要输入数据,其实我们输入的是一个个的键值对;

当我们填好后,请求就会到达服务器,服务器会根据输入的键值对来做各种处理,最终会返回数据和图表;

ui里就包含了输入的键值对信息,以及服务器的输出过来了如何显示在网页上;

server就无所谓了,因为ui已经把输入输出固定死了,你可以做任何花式处理,但你必须返回指定的输出才能在网页上显示;

shinyApp就是把两者连接在一起;

一个简单的案例:

ui里定义的输入就是bins;输出就是disPlot;

server里就是根据现有的数据集和bins,画了个hist;

# setwd("/Users/zxli/Dropbox/PureZ/project/singleCell/tea/shiny")

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") )
)
) # 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") }) } shinyApp(ui = ui, server = server)

  

深入ui

小技巧:

1. 如何输入文件?

fileInput

2. 如何显示数据?

默认的会把整个table都显示,显然DT的格式更美观,还可以排序过滤。

DT::dataTableOutput
DT::renderDataTable

3. 如何改变布局?

sidebarLayout很实用,但可以改变;常见布局并不多,参见官网:Application layout guide

4. 如何提交数据?

textInput

5. 有哪些好看的主题?

shinydashboard这个布局比较高大上。

library(devtools)
install_github("nik01010/dashboardthemes")

6. 如何解决rJave问题?

先安装java8,然后sudo R CMD javareconf。参考:rJava fails to load #2254  

macos去/Library/Java/JavaVirtualMachines/里面把之前的版本给卸载了。

stdio.h的问题就得去/Library/Developer/CommandLineTools/Packages/把包再装一遍。

怎么搞都搞不好,最后发现默认的rJava是依赖jdk11.0.1的,装了对应版本,世界瞬间清净了。

7. 如何下载table?

downloadHandler

深入server

高级语法

Reactivity - An overview

reactive重新激活

「R shiny基础」reactive让shiny应用运行速度变快

用内存换速度,原来每有一点变动就重新计算所有结果,现在把部分结果放在内存中,除非指定的发生变化,否则不会重新计算。

isolate隔离

正常情况下,一旦参数发生变化,就必然会更新结果,isolate则只在激活按钮时才生效。

Stop reactions with isolate()

Use isolate() to avoid dependency on input$obs

observe

类似reactive,但是没有输出值。

renderUI


第二个R shiny的网站app

主要功能:

1. 用词云展示核心的信息,table呈现meta信息;

2. 用户搜寻自己感兴趣的样本,导出样本信息;

3. 用户查找感兴趣的基因,导出感兴趣的基因在特定组织、处理中的表达;

4. 精确查找meta信息,整合做meta RNA-seq分析,DEG获取;

5. 常规pipeline分析;

R Shiny app | 交互式网页开发的更多相关文章

  1. 将Shiny APP搭建为独立的桌面可执行程序 - Deploying R shiny app as a standalone application

    目录 起源! 目的? 怎么做? 0 准备工作 1 下载安装R-portable 2 配置 Rstudio 3 搭建Shiny App 3.1 添加模块 3.2 写AppUI和AppServer 3.3 ...

  2. R︱shiny实现交互式界面布置与搭建(案例讲解+学习笔记)

    要学的东西太多,无笔记不能学~~ 欢迎关注公众号,一起分享学习笔记,记录每一颗"贝壳"~ --------------------------- 看了看往期的博客,这个话题竟然是第 ...

  3. kmeans聚类中的坑 基于R shiny 可交互的展示

    龙君蛋君 2015年5月24日 1.背景介绍 最近公司在用R 建模,老板要求用shiny 展示结果,建模的过程中用到诸如kmean聚类,时间序列分析等方法.由于之前看过一篇讨论kmenas聚类针对某一 ...

  4. 安卓APP承载网页(WebView)

    安卓APP自身如何打开网页,如何制作一个简单的浏览器,WebView在其中将是一个重要的角色.WebView是一个基于WebKit引擎.展现Web页面的控件. Webview 是一个基于webkit引 ...

  5. R shiny 小工具Windows本地打包部署

    目录 服务器部署简介 windows打包部署 1. 部署基本框架 2.安装shiny脚本需要的依赖包 3.创建运行shiny的程序 [报错解决]无法定位程序输入点EXTPTE_PTR于动态链接库 将小 ...

  6. 实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目

    系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使 ...

  7. 微信公众平台开放JS-SDK(微信内网页开发工具包)

    微信公众平台开放JS-SDK(微信内网页开发工具包),这次开放接口是质的飞跃,是对开发者和广大用户一个利好的消息.未来的公众号图文消息会更丰富多彩,准备脑洞大开吧!(第三方平台正式支持接入微信公众平台 ...

  8. [HTML]网页开发学习笔记

    为了要开发一套教学使用的教师管理系统,(客户需求使用网页做教师控制端口)我便学习了一下HTML网页开发. 很不错的学习开发的网站:http://www.w3school.com.cn/index.ht ...

  9. 当里个当,免费的HTML5连载来了《HTML5网页开发实例详解》连载(一)

    读懂<HTML5网页开发实例详解>这本书 你还在用Flash嘛?帮主早不用了 乔布斯生前在公开信“Flash之我见”中预言:像HTML 5这样在移动时代中创立的新标准,将会在移动设备上获得 ...

随机推荐

  1. PM2 监控 Spring Boot 项目运行

    更多 PM2 的用法介绍请参考: PM2简易使用手册 - 掘金 由于 PM2 通常都用于 node 应用, 所以 exec_mode 应写为 fork, 其中最重要的是 args, -jar 和 ja ...

  2. Django使用Redis进行缓存详细最全流程

    背景和意义服务器数据非经常更新.若每次都从硬盘读取一次,浪费服务器资源.拖慢响应速度.而且数据更新频率较高,服务器负担比较大.若保存到数据库,还需要额外建立一张对应的表存储数据.在Django中建立表 ...

  3. mysql学习之基础篇01

    大概在一周前看了燕十八老师讲解的mysql数据库视频,也跟着学了一周,我就想把我这一周所学的知识跟大家分享一下:因为是第一次写博客,所以可能会写的很烂,请大家多多包涵.文章中有不对的地方还请大家指出来 ...

  4. node+express 搭建本地服务

    首先,得有node环境,其次建个项目 目录例如  酱紫! 再次 写server.js,当然你可以换个名字a.js .b.js.why.js随你喜欢 var express = require('exp ...

  5. Django解析器

    1.什么是解析器? 对请求的数据进行解析-请求体进行解析.解析器在你不拿请求体数据时,不会被调用. 安装与使用:(官方文档) https://www.django-rest-framework.org ...

  6. 《你说对就队》第九次团队作业:【Beta】Scrum meeting 1

    <你说对就队>第九次团队作业:[Beta]Scrum meeting 1 项目 内容 这个作业属于哪个课程 [教师博客主页链接] 这个作业的要求在哪里 [作业链接地址] 团队名称 < ...

  7. spring boot学习笔记(二)创建spring boot项目

    用eclipse(需要用高版本,要不然弄不出来):new →Spring Sarter Project 用IDEA:一般默认 一般默认 入门级的先 剩下的一般默认... 一.项目至少有下面的东西,里面 ...

  8. centos 环境下安装maven

    安装Maven Maven的下载地址:http://maven.apache.org/download.cgi这里以最新的3.2.3版本为例进行安装,在这之前需要确保机器上已经安装了JDK. 首先下载 ...

  9. 洛谷 P3372 【模板】线段树 1 题解

    Analysis 新学了一种很骚气的线段树写法,就是把整个线段树放到一个struct里面,然后可以直接调用里面的函数 #include<iostream> #include<cstd ...

  10. Greenplum failed segment的恢复方法--primary与mirror都可修复

    当在使用greenplum过程中有不当的操作时,可能会出现segment节点宕掉的情况(比如在greenplum运行的过程中停掉其中几台segment节点的服务器),通过下面的方法可以恢复segmen ...