0%

Shiny用法整理(二)

继续整理shiny的几个用法

DataTables in a Shiny App

DT包可以说是shiny网页展示表格的首选(个人觉得哈),其功能丰富,是JS的DataTables库的R端口,功能非常强强大,简单的使用即可满足常用的需求,如: library(DT)

ui <- basicPage(
  h2("The mtcars data"),
  DT::dataTableOutput("mytable")
)

server <- function(input, output) {
  output$mytable = DT::renderDataTable({
    mtcars
  })
}

shinyApp(ui, server)

其中DT::dataTableOutput可用DTOutput代替,同时DT::renderDataTable需要改用renderDT,后者更加符合shiny的代码风格

详细的功能,我之前也做过DT包的使用笔记Learning DT包,只能说一句:非常好用!

官方手册:DT: An R interface to the DataTables library

upload files

作为一个主打交互网站的shiny,有一个让用户输入文件的接头是必须的,这可以用fileInput函数,UI端如下:

fileInput(inputId = "file", label = "File Input:", 
      accept = c("text/plain",
                 ".txt"))

对输入文件的格式要求主要看accept参数,其对应的是MIME类型,常见的有:

  • 普通文本:.txt,text/plain
  • csv文本:.csv,text/csv
  • GIF:.gif,image/gif

对应的server端,如下:

infile <- input$file
data <- read.table(infile$datapath, sep = "\t", header = T, stringsAsFactors = F)

Shiny HTML Tags Glossary

HTML相比不陌生,写网页必备;shiny身为一个网页可视化工具,其也是兼容HTML语法的,所以你想在网页上添加一些HTML标签的话只需要用HTML语法就行;但是shiny作者为了让HTML标签让不懂html的人能以R的角度来理解,将其全部改写为了R函数形式了。。。

如要写个h1标题,HTML标签:<h1>My header</h1>,而shiny函数则是:tags$h1("My header")

tags函数包含了110个HTML标签,如用names(tags)查看,如:

> head(names(tags))
[1] "a"       "abbr"    "address" "area"    "article" "aside"

几个比较实用的有:

  1. 链接网站:

    tags$a(href="www.rstudio.com", "Click here!")
    <a href="www.rstudio.com">Click here!</a>
  2. 添加文字:

    tags$p("First paragraph")
    <p>First paragraph</p>
  3. 添加图片

    tags$img(src = "www.rstudio.com", width = "100px", height = "100px")
    <img src="www.rstudio.com" width="100px" height="100px"/>

而且还可以像HTML那样添加子元素,如:

tags$div(class = "header", checked = NA,
  tags$p("Ready to take the Shiny tutorial? If so"),
  tags$a(href = "shiny.rstudio.com/tutorial", "Click Here!")
)
<div class="header" checked>
   <p>Ready to take the Shiny tutorial? If so</p>
   <a href="shiny.rstudio.com/tutorial">Click Here!</a>
</div>

但是说真的,我还是觉得用HTML原生态的比较好,至少资料多。。。

Download data

比如我们通过shiny网页小程序将输入的数据通过一定的处理后产生结果文件,这时我们需要将这部分的数据弄一个可选择的按钮之类

首先一般会使用downloadButton("downloadData", "Download")来在UI界面上形成一个下载按钮

接着就是用server中用代码将你所需要的数据/图片等输出了,这里的写法比较固定化(刚接触的话最好按照模板修改,不然会失败,被坑过。。。)

output$downloadData <- downloadHandler(
    filename = function() {
      paste(input$dataset, ".csv", sep = "")
    },
    content = function(file) {
      write.csv(datasetInput(), file, row.names = FALSE)
    }
  )

这里需要分成两部分写,filename = function(){}确定要输出的文件格式和文件名,content = function(file){}确定输出文件的内容(可以是图片,也可以是表格等),必须要有这两部分哦

还可以在downloadHandler函数中设定输出文件格式,如:image/pngtext/csv

除了常见的图片png,表格txt外,还有一些需要借助的包才能输出的格式,如xlsx等也可以在shiny中输出的,如我之前想用openxlsx包来输出的xlsx表格:

output$download <- downloadHandler(
  filename = function(){
    "ouput.xlsx"
  },
  content = function(file) {
    fname <- paste(file,"xlsx",sep=".")

    wb <- createWorkbook()
    createSheet(wb,"sheet1")
    writeWorksheet(wb,data = res,sheet = "sheet1")
    saveWorkbook(wb, file)
  }
)

这两篇shiny用法整理笔记,以上均来自于http://shiny.rstudio.com/articles/中比较常用的用法笔记,shiny团队将近几年的shiny文档均整理下一起了,不定时的阅读下,或者有需要的时候去翻下都是不错的选择

本文出自于http://www.bioinfo-scrounger.com转载请注明出处