ShinyApp中的表格:第三天笔记

2023-11-13

shiny中的表格

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

静态表格:shiny中自带的table

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

## 多文件结构的shinyapp,每个*.r代表一个R文件

## global.r## 存放一些需要运行的代码
library(tidyverse)
library(shiny)
data.main <- starwars

min_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 widgets
  output$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
    )
  })
  
  # Table
  output$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 <- data
    tmp$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 buttons
  radioButtons("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 buttons
  radioButtons("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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ShinyApp中的表格:第三天笔记 的相关文章

  • ps -aux

    查看某个程序的进程号并删除 1 ps aux grep 进程 2 kill 9 进程号 删除该进程

随机推荐

  • visual studio使用教程

    linux疑难问题排查实战 分享了作为公司专家 在项目开发过程中内存优化 堆 栈 代码段 数据段 性能优化 死机 栈越界 堆越界 死锁等疑难问题排查的案例 使用的工具 perf asan strace memleak等 工作经验 大家可以点
  • blender界面基础认识

    blender界面基础认识 自定义功能 Edit gt Preference 界面 主题 视图 灯光 编辑 动画 插件 输入 视图切换 键位映射 系统 保存 加载 文件路径 Blender界面分为以下三个部分 上侧的顶栏 中间的工作区 底部
  • Sklearn专题二 随机森林

    专题二 随机森林 概述 1 集成算法 1 集成算法考虑多个评估器的结果 汇总获取更好的分类 回归表现 2 三种集成算法 装袋法bagging 模型独立 提升法boosting 模型相关 stacking 3 随机森林是一种bagging集成
  • .NET平台常用的开发组件

    工欲善其事 必先利其器 其优雅的编程风格 高效率的开发速度 极度简单的可扩展性 足够强大开发类库 较小的学习曲线 让我对这个平台产生了浓厚的兴趣 在工作和学习中也积累了一些开源的组件 虽然跟Java比Net还是要少 但也足够使用了 其中有一
  • 【C#实现文字转语音功能】

    本文实例为大家分享了C 实现文字转语音的具体代码 供大家参考 具体内容如下 客户提出要求 将文字内容转为语音 因为内网环境 没办法采用联网 在线这种方式 灵机一动 能否写一个简单的例子呢 搜索相关资料还真行 话不多说 有图有真相 关键是 c
  • 网传Spring爆出更大漏洞?别再炒作了…

    之前刚刚过去的log4j2漏洞还历历在目 这次来了个更大的 云舒老大在29日发微博称 出了个超级大漏洞 有吃瓜群众就问 这个瓜有 log4j2 那么好吃吗 云舒大佬的回复是 更大 之后 又有安全大佬sunwear给了一些更细节的信息 所以漏
  • java中类可以包含哪些元素,Java类中包含的元素及作用

    Java类是面试中常考的知识点 是组成Java应用的基本成分 小型和大型的应用都是由类组建而成的 作为合格的Java工程师 一定要清晰了解Java类及其包含的元素及作用 今天学码思Java培训老师就Java类中包含的元素及作用做一个大致讲解
  • springSecurity跨域CORS处理

    续言 之前 知识追寻者写过关于springboot 的跨域处理 并且介绍了跨域相关的概念 具体的可以查看这篇知识追寻者springboot教程系列文章 https zszxz com category springboot article
  • iOS“断点”(Break Point)你不知道多强大

    iOS 断点 Break Point 你不知道多强大 转载自http mp weixin qq com s biz MzA4ODk0NjY4NA mid 230272985 idx 1 sn 045c98bfb2d8dd1ecf7a7321
  • ssh配置config文件,实现vscode免密登陆

    在使用ssh连接服务器时 每一次用vscode连接服务器进行开发 都需要输入密码 相当鸡肋 对config的配置能够实现解决这个问题 step1 生成ssh密钥 如果已经有了就不需要了 使用以下命令 一路回车即可 ssh keygen t
  • 触发connect超时事件

    触发connect超时事件 有关于如何触发connect超时事件 之前相当然的认为在服务器程序accpet函数前阻塞一段事件就好了 这个思路是完全错误的 这是我犯了的一个错误 没有严格的验证自己的程序就将其发布了出来 被小组的小伙伴提问时才
  • shell编程基础: menu drvien script template(菜单脚本模板)

    前言 菜单类脚本 其实就是我们经常使用的交互脚本 在我们安装一个app的时候最常见 我们需要使用交互脚本进行一些配置 在工作中 写一个交互性脚本也同样重要 比如我现在需要写一个数据库授权的脚本 上下文是这样的 我们在开发中都是使用docke
  • LCD和LED屏幕的工作原理总结

    1 点阵取模原理之横向取模与纵向取模 1 1 针式打印机 针式打印机16针是纵向排列 每次打印垂直的16bit 然后右移一bit 继续下列打印 字节的MSB表示最上面的点 字节LSB表示最下面的点 由于汉字字模的点阵是横向排列的 而提供给打
  • 实现单层神经网络

    在前面 我们分别使用逻辑回归和 softmax 回归实现了对鸢尾花数据集的分类 逻辑回归能够实现线性二分类的任务 他其实就是最简单的神经网络 感知机 而softmax回归则实现的是多分类任务 它也可以看做是输出层有多个神经元的单层神经网络
  • Flink之IntervalJoin介绍

    InterValJoin算子 间隔流 一条流去join另一条流去过去一段时间内的数据 该算子将keyedStream与keyedStream转化为DataStream 再给定的时间边界内 默认包含边界 相当于一个窗口 按指定的key对俩个K
  • (ESP32学习13)驱动TFTLCD(SPI接口)

    本篇博文教大家ESP32 驱动TFT SPI驱动 本文给大家的库直接适用于2寸 240 320 的SPI TFT 但实际上这种驱动移植适用于所有的SPI驱动的TFT屏幕 底层代码把LCD初始化里面的寄存器参数改一改就适用了 这些寄存器参数在
  • 基于STM32F103循迹小车

    本人小白一个 利用暑假时间在家做一些小东西 我这次想要跟大家分享的是基于STM32F103的循迹小车的制作 两个轮子 主要硬件 板子 L298N 电机 4个循迹模块等 话不多说 先上干货 XJ c include XJ h 循迹文件 inc
  • KEIL下载报错——TRACE HW not present

    使用st link调试遇到烧写完成之后不能进入调试状态 提示TRACE HW not present 点击确认 提示错误 Erron target DLL has been cancelled Debugger aborted 解决办法 第
  • 何在python里面用tkinter模块做一个GUI界面,实现button点击之后弹出新页面,新页面是一些文字内容

    首先弹出新页面需要用到callback函数 代码编写如下 import scapy from tkinter import root tk Tk root wm geometry 600x400 root title tk def call
  • ShinyApp中的表格:第三天笔记

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