shiny中的表格

除了在shinyapp中生成图片,有时还需要生成表格,用于查看数据,以及保存下载 表格分为两类:动态和静态。静态的表格更有利于打印和输出pdf,而动态的表格提供了更多的交互式选项,还会响应屏幕的大小来进行缩放

静态表格:shiny中自带的table

shiny中自带的表格,有利于减少其他依赖包,降低内存消耗,定制和美化会受到限制

## 多文件结构的shinyapp,每个*.r代表一个R文件## global.r## 存放一些需要运行的代码
library(tidyverse)
library(shiny)
data.main <- starwarsmin_height <- unique(min(starwars$height, na.rm = TRUE))
max_height <- unique(max(starwars$height, na.rm = TRUE))## ui.r
navbarPage("shiny::renderTable",tabPanel("Start Narrow",uiOutput('height_narrow_slider'),  #增加滑块tableOutput('star_narrow')   #表格),tabPanel("Start Wide",uiOutput('height_wide_slider'),tableOutput('star_wide')),tabPanel("Start List",tableOutput('star_lists'))
)## server.r
function(input, output, session){# Input widgetsoutput$height_narrow_slider <- renderUI({sliderInput(inputId = "height_limit_star_narrow",label = "height limit",min = min_height,max = max_height,value = min_height)})output$height_wide_slider <- renderUI({sliderInput(inputId = "height_limit_star_wide",label = "height limit",min = min_height,max = max_height,value = min_height)})# Tableoutput$star_narrow <- renderTable({starwars %>%select(name, species, homeworld, height) %>%filter(height <= input$height_limit_star_narrow) %>%arrange(desc(height))})# striped = TRUE,# hover = TRUE,# na = "[Missing]")output$star_wide <- renderTable({starwars %>%select(name:species) %>% filter(height <= input$height_limit_star_wide) %>%arrange(desc(height))})output$star_lists <- renderTable({starwars %>%select(name, films, vehicles, starships) %>%# unnest()mutate_if(is.list, list(~map_chr(.,~paste(.x, collapse = "<br>"))))}, width = "100%",sanitize.text.function = function(x) x)}

静态表格:kableExtra

kableExtra包的表格,也是静态的,比shiny中自带的表格具有更大的灵活性 kableExtra在server部分并不使用 render*() 函数,但ui部分还是使用tableOutput这个函数输出
说明文档链接:https://cran.r-project.org/web/packages/kableExtra/vignettes/awesome_table_in_html.html#From_other_packages

## ui.r
#install.packages("kableExtra")
library(kableExtra)navbarPage("kableExtra",tabPanel("Star Narrow",fluidPage(tableOutput('star_narrow'))),tabPanel("Star Wide",fluidPage(tableOutput('star_wide'))),tabPanel("Star List",fluidPage(tableOutput('star_lists'))),collapsible = TRUE
)## server.r
library(kableExtra)
library(tidyverse)function(input, output, session){output$star_narrow <- function(){starwars %>%select(name, species, homeworld, height) %>%arrange(desc(height)) %>%kable() %>%kable_styling(bootstrap_options = c("striped", "hover"))}output$star_wide <- function(){starwars %>%select(name:homeworld) %>%arrange(desc(height)) %>%kable() %>%kable_styling()}output$star_lists <- function(){starwars %>%select(films:starships) %>%kable() %>%kable_styling() ##支持list,会将list内容用逗号分隔}}

动态表格:Rstudio 的 DT

DT包的表格,这个属于动态表格,具有灵活交互式展现表格的特点
使用文档链接:https://rstudio.github.io/DT/

## ui.r
library(DT)navbarPage("DT Interactive Tables",tabPanel("Star Narrow",fluidPage(DTOutput('star_narrow'))),tabPanel("Star Wide",fluidPage(checkboxInput("show_rownames",label = "Show rownames?"),DTOutput('star_wide'))),tabPanel("Star List",fluidPage(DTOutput('star_lists'))),collapsible = TRUE
)## server.r
library(DT)
library(tidyverse)
function(input, output, session) {output$star_narrow <- renderDT({starwars %>%select(name, species, homeworld, height) %>%arrange(desc(height))})output$star_wide <- renderDT({starwars %>%select(name:homeworld) %>%arrange(desc(height)) %>%datatable(extensions = "Responsive", rownames = input$show_rownames)})output$star_lists <- renderDT({starwars %>%select(films:starships) %>%datatable()})}

制作基因信息列表

## help.r
# 创建基因信息链接
# createLink for GeneCards ------------------------------------------------
geneCardsLink <- function(val,name) {sprintf('<a href="https://www.genecards.org/cgi-bin/carddisp.pl?gene=%s" target="_blank" class="btn btn-primary">%s</a>',val,name)
}# createLink for NCBI -----------------------------------------------------
ncbiLink <- function(val,ncbi) {sprintf('<a href="https://www.ncbi.nlm.nih.gov/gene/?term=%s" target="_blank" class="btn btn-primary">%s</a>',val,ncbi)
}# createLink for Esemble --------------------------------------------------
ensemblLink <- function(val,ensembl) {sprintf('<a href="https://www.ensembl.org/Homo_sapiens/Gene/Summary?db=core;g=%s" target="_blank" class="btn btn-primary">%s</a>',val,ensembl)
}# ui.r
fluidPage(DT::DTOutput("gene_info")
)# server.r
library(readr)
data <- read_csv("data/geneInfo.csv")
source("helper.R")function(input, output, session){geneInfo <- reactive({tmp <- datatmp$NCBI <- ncbiLink(tmp$SYMBOL,tmp$SYMBOL)tmp$Ensembl.ASIA <- ensemblLink(tmp$ENSEMBL,tmp$ENSEMBL)tmp$GeneCards <- geneCardsLink(tmp$SYMBOL,tmp$SYMBOL)tmp})output$gene_info <- DT::renderDT(#output$preview3 <- reactable::renderReactable({DT::datatable( geneInfo(), escape = FALSE,  #决定超链接能否被渲染出来rownames = F,extensions = "Responsive", ##缩小页面在所在行的最前面出现加号,点击显示被隐藏的列options=list(pageLength = 15,lengthMenu = list(c(15, 50, 100, -1),c(15, 50, 100, "ALL")),#-1显示所有的scrollX = TRUE,scrollY = TRUE,fixedColumns = TRUE,fixedHeader = TRUE)))}

作业:热门的词云图+基因信息表格

# help.r
# createLink for GeneCards ------------------------------------------------
geneCardsLink <- function(val,name) {sprintf('<a href="https://www.genecards.org/cgi-bin/carddisp.pl?gene=%s" target="_blank" class="btn btn-primary">%s</a>',val,name)
}# createLink for NCBI -----------------------------------------------------
ncbiLink <- function(val,ncbi) {sprintf('<a href="https://www.ncbi.nlm.nih.gov/gene/?term=%s" target="_blank" class="btn btn-primary">%s</a>',val,ncbi)
}# createLink for Esemble --------------------------------------------------
ensemblLink <- function(val,ensembl) {sprintf('<a href="https://www.ensembl.org/Homo_sapiens/Gene/Summary?db=core;g=%s" target="_blank" class="btn btn-primary">%s</a>',val,ensembl)
}# ui.r
fluidPage(sliderInput("num", label = h3("选择热门基因的数量"), min = 1, max = 200, value = c(100)),# Copy the line below to make a set of radio buttonsradioButtons("radio", label = h3("please choose taxid"),choices = list("human" = 9606, "pig" = 9823),  selected = 9606),shiny::plotOutput( "cloud"),DT::DTOutput("gene_info")# server.r
fluidPage(sliderInput("num", label = h3("选择热门基因的数量"), min = 1, max = 200, value = c(100)),# Copy the line below to make a set of radio buttonsradioButtons("radio", label = h3("please choose taxid"),choices = list("human" = 9606, "pig" = 9823),  selected = 9606),shiny::plotOutput( "cloud"),DT::DTOutput("gene_info")    

image-20210504211148970

【参考资料】

https://mp.weixin.qq.com/s/VCRukFCQaagTF6GKu2DLgA

ShinyApp中的表格:第三天笔记相关推荐

  1. 数据刷新中的并行改进(三) (r5笔记第79天)

    在之前的两篇中分享了数据刷新的并行改进,其实在对很多的数据表做了切分之后,数据刷新的总体负载就基本是平均的了.如何使得刷新的过程更加平滑和完整,我们还是需要做一些工作的.首先各个节点中都存在相同的表( ...

  2. 信号完整性(SI)电源完整性(PI)学习笔记(二十八)S参数在信号完整性中的应用(三)

    S参数在信号完整性中的应用(三) 1.对S参数元素的解释取决于对端口的指派情况. 元器件内部的确切连接将会影响如何解释每个S参数.最常见的情况就是6条不同传输线的端口指派,则对于每个具体S参数的解释也 ...

  3. 印象笔记打开错误_只会用手机自带便签?这三款笔记软件分分钟秒杀

    原创文 | 文艺旁·点击上方收听音频 正文共:2555字 16图    预计阅读时间:7分钟 手机自带便签的唯一优点在于打开迅速,但整理大量文件,多设备同步就非常不方便了. 第三方笔记软件优点: 多级 ...

  4. 如何批量处理word中的表格

    如何批量处理word中的表格 如何批量处理word中的表格 1 . 批量设置word中的表格宽度 比如,我这有一个word文档有200多个表格(全部是3列的),现在要求第一列宽度3cm,第二列4cm, ...

  5. word录入表单数据 java 导入系统,java导入excel | 怎么把excel中的数据批量导入到word中的表格中...

    用javascript怎么实现把excel中的数据批量导入到数据库表中 这个js不能直接实现吧 我们程序用到 先读取excel内容转换成数组 然后放到页面上 再提交表单 储存 MySql如何批量添加数 ...

  6. Camelot:从pdf中提取表格数据

    Camelot:从pdf中提取表格数据 文章目录: 一.Camelot的介绍和安装 1. Camelot介绍 2. Camelot的安装 3. 其他 二.Camelot的使用 1. 快速入门使用 2. ...

  7. ajax从mysql提取数据在html中_Python骚操作,提取pdf文件中的表格数据!

    在实际研究中,我们经常需要获取大量数据,而这些数据很大一部分以pdf表格的形式呈现,如公司年报.发行上市公告等.面对如此多的数据表格,采用手工复制黏贴的方式显然并不可取.那么如何才能高效提取出pdf文 ...

  8. php中插入表格 标签,PHP_HTML中的表格元素,一,table标签。tablegt - phpStudy

    HTML中的表格元素 一, 1,border属性的参数值是数字,表示表格边框宽度所占的像素点数.它也可以不带有参数值使用,仅表示该表格是有边框的.例如, 2,width和height属性的作用是指定表 ...

  9. layui table 添加img_layui中table表格的基本操作

    最近抽空总结了下layui中table表格的相关配置,解释的比较全面,可供大家参考,页面效果如下: table表格.png table表格html部分: 新增 备注 编辑 table表格渲染js (包 ...

  10. axure 8 表格合并_搞定LaTeX论文中的表格

    论文中的表格制作一直是令人头疼的事情,直到我遇见了这个Excel插件. 在此之前,我用过一些其他的小工具,例如在线的latex表格生成器 以及离线的LaTable软件 .他们虽然部分解决了手动写lat ...

最新文章

  1. 算法工程师落地_模型的更新升级能力
  2. sublime Text3常用快捷键
  3. mybitis第三讲:关联查询
  4. java 编译引入库_eclipse编译cpp文件,并且引用其他预编译的库
  5. 样条之贝塞尔(Bezier)
  6. [Java网络编程]UDP通信程序练习
  7. java与java ee_Java EE 8 MVC:全局异常处理
  8. 个推成为首家支持统一推送接口标准的第三方推送服务商!
  9. 从无到有整合SpringMVC-MyBatis项目(2):搭建SpringMVC项目
  10. php str_replace替换特殊字符
  11. C++ :stringstream介绍,使用方法与例子(转)
  12. Android 开发之 bindService() 通信
  13. jquery核心的学习进程一
  14. 05.[图解TCPIP(第5版) 文档简单整理
  15. 新手如何学习PLC编程?
  16. NLP算法-情绪分析-snowNLP算法库
  17. 国内著名高校飞跃手册整理
  18. Shell字符串的替换
  19. ip获取所在城市名称接口-JAVA
  20. 后台管理系统之用JQuery-validate做表单验证

热门文章

  1. 传说华为面试爱问正则,这不海外留学生校招面试题来了
  2. x86 单线并发多拨_带宽“单线多拨“倍增大法教程
  3. 2.字节跳动2019雀魂启动
  4. 全智通A+常见问题汇总解答—A+配件仓库—维修领料—编辑领料单:最后一个仓库无法显示
  5. 未实施内容安全策略 (CSP)
  6. 机器学习(ML)、深度学习(DL)和图像处理(opencv)专用英语词典
  7. bootloader 详细介绍
  8. “Bluetooth keeps stopping“
  9. 6-2 折半查找的实现 (10 分)
  10. cracker.jar 文件打不开