继续整理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"
几个比较实用的有:
链接网站:
tags$a(href="www.rstudio.com", "Click here!") <a href="www.rstudio.com">Click here!</a>
添加文字:
tags$p("First paragraph") <p>First paragraph</p>
添加图片
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/png
,text/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转载请注明出处