Usage
DT包主要用到的函数是datatable()
,其参数如下:
datatable(data, options = list(), class = "display", callback = JS("return table;"),
rownames, colnames, container, caption = NULL, filter = c("none", "bottom",
"top"), escape = TRUE, style = "default", width = NULL, height = NULL,
elementId = NULL, fillContainer = getOption("DT.fillContainer", NULL), autoHideNavigation = getOption("DT.autoHideNavigation",
NULL), selection = c("multiple", "single", "none"), extensions = list(),
plugins = NULL)
class:默认是display,其他用法可以看https://datatables.net/manual/styling/classes,其实个人觉得差别不大
rownames:TRUE or FALSE判断是否需要rownames,colnames类似;还可以自定义rowname,包括对已有的名字进行替换,colnames也类似,如替换第2列和第4列的列名:
datatable(head(iris), colnames = c('Another Better Name' = 2, 'Yet Another Name' = 4))
container:这是一个比较有用的参数,可以提供不同的table container来装table cells;首先你需要自己设定一个table,然后将设定好的table作为container的参数,这里需要点CSS的基础知识,如
# a custom table container sketch = htmltools::withTags(table( class = 'display', thead( tr( th(rowspan = 2, 'Species'), th(colspan = 2, 'Sepal'), th(colspan = 2, 'Petal') ), tr( lapply(rep(c('Length', 'Width'), 2), th) ) ) )) print(sketch) datatable(iris[1:20, c(5, 1:4)], container = sketch, rownames = FALSE)
caption:这是一个设定标题的,简单点的话就直接后面跟字符串,复杂点的话可以调用htmltools::tags$caption来设定不同的样式
filter:这是一个过滤的功能,如 filter = 'top'即可在列名下面出现一个可用于过滤的框;如果是数值型的,会有最小值到最大值的框;如果是因子型的话,会有个下拉选择框;如果是字符串型,会有个匹配过程,即只显示匹配上输入字符串的内容
callback:这是一个可用于执行datatable初始化后的javascript函数,比如下面这个例子,当展现datatable内容时,javascript会执行跳入下一页的程序,所以会显示下一页的内容
datatable(head(iris, 30), callback = JS('table.page("next").draw(false);'))
escape:这个主要是一个逻辑值,TRUE则表示显示html代码,FALSE则不显示
options
这个是一个非常强大的功能,你可以将这些options写在list中用于定制自己想要的datatable,如:
比如你想设定某一列的表格的宽度,你需要先打开autoWidth = TRUE,然后通过columnDefs参数来设定,如将第1列和第3列的宽度设置为200,内容居中
columnDefs = list(list(className = 'dt-center', width = '200px', target = c(1,3))
pageLength:字面上就能理解,指定datatable页面显示行数
lengthMenu:可以搭配pageLength来使用,其是用于设定页面左上角show框中的显示页面数目的列表
options还可以用于设定全局的options,如:下面的language可以用于改变页面上原本设定的名字
options(DT.options = list(pageLength = 5, language = list(search = 'Filter:')))
order:可用于对特定的某列进行排序,如:
order = list(list(2, 'asc'), list(4, 'desc'))
dom:一个很有用的参数,主要用于设定页面的一些显示的框框,比如:f表示search过滤框;t表示table;l表示控制显示的table行数;i表示table的information;p表示右下角的页码框;r表示Enable or disable the display of a 'processing' indicator when the table is being processed (e.g. a sort);B表示用于buttons控件
initComplete:相当于callback作用,如:下面代码可以设定表头的背景颜色
datatable(head(iris, 20), options = list( initComplete = JS( "function(settings, json) {", "$(this.api().table().header()).css({'background-color': '#000', 'color': '#fff'});", "}") ))
Helper Functions
用format*()函数来给特定的列设置特定的格式,比如美元符和百分号
datatable(m) %>% formatCurrency(c('A', 'C')) %>% formatPercentage('D', 2) datatable(m) %>% formatCurrency(1:2, '\U20AC', digits = 0) %>% formatRound('E', 3)
formatStyle:可用于对table cells设置CSS格式,例如字体颜色,背景颜色,字体等,如:
datatable(iris, options = list(pageLength = 5)) %>% formatStyle('Sepal.Length', color = 'red', backgroundColor = 'orange', fontWeight = 'bold')
此外,还有styleInterval(), styleEqual(), and styleColorBar()等函数可以用于设定table cells(对特定的值以及范围内的数字进行CSS设定)
tableHeader()和tableFooter()函数可用于设定页眉和页脚,当你想定义一个特定的table container
saveWidget()可用于保存html的结果
DataTables Extensions
我们可以将多个extensions放置在datatable()函数内,如:
extensions = c('AutoFill', 'ColReorder')
但不是所有extensions都可以兼容的放置在一起的,具体可以查看:https://datatables.net/download/compatibility
AutoFill:在你鼠标移到某个cell上时,cell的右下角会有个蓝色小方框,如:
datatable(iris, extensions = 'AutoFill', options = list( autoFill = list(columns = c(1, 2, 3), focus = 'click') ))
这里有个focus参数,默认的是鼠标放上去就会显示蓝色小方框,如果设定为click,则表示点击后才会显示
Buttons:是一个非常有用的控件,可以提供保存table为CSV/XLS/PDF、复制table以及打印table的功能,注意:在使用这个前提,需要在dom参数添加B选项,如:
datatable( iris, extensions = 'Buttons', options = list( dom = 'Bfrtip', buttons = c('copy', 'csv', 'excel', 'pdf', 'print') ) )
ColRecorder:主要用于拖拽行,就跟excel里面改变行位置一样的功能,如下,如果添加个realtime=FALSE,则表示拖拽的时候不显示拖拽后的结果,当鼠标停止拖拽后才显示
# disable realtime updating datatable(iris2, extensions = 'ColReorder', options = list( colReorder = list(realtime = FALSE) ))
ColVis:主要用于选择需要显示的列,其封装在Buttons里面,用法如下:
# using I() here to make sure it is converted to an array in JavaScript datatable( iris, rownames = FALSE, extensions = 'Buttons', options = list(dom = 'Bfrtip', buttons = I('colvis')) )
因为是传入单个colvis参数,所以要用I()将其转为数组,但是如果是下面的情况,就不需要了
buttons = list(list(extend = 'colvis', columns = c(2, 3, 4)))
FixedColumns:当列较多时,就可以用这个参数,形成类似excel表格的滚动条,scrollX=TRUE表示横向滚动条,FixedColumns=TRUE表示默认所有列都是可滚动的,如果其后面接list(leftColumns = 2, rightColumns = 1)表示左数第2列和右数第1列保持不动,其他则可滚动,如:
# fix some left 2 columns and right 1 column datatable( m, extensions = 'FixedColumns', options = list( dom = 't', scrollX = TRUE, fixedColumns = list(leftColumns = 2, rightColumns = 1) ) )
KeyTable:这个类似于excel表格中选中某个cell时的周围的框,也可以随意上下左右移动该cell,当鼠标选中某个cell时
datatable(iris2, extensions = 'KeyTable', options = list(keys = TRUE))
Responsive:这个简单的说就是当你表格的显示窗口太窄时,其可以将不能显示的内容隐藏在某一位置,点击后即可查看,如下:
datatable(iris2, extensions = 'Responsive')
RowReorder:这个类似于ColRecorder,只是这个是对应row来操作的,但是如果你colnames参数固定为ID=1,则表示当你移动某个ROW时,其第一列ID的值是不会变的,可以看如下的代码:
datatable( iris2, colnames = c(ID = 1), extensions = 'RowReorder', options = list(rowReorder = TRUE) )
Scroller:这个类似于FixedColumns,其是在纵向有个滚动条,当行数太多不能全部显示的时候使用,对于scrollY不是逻辑值而是数值型时,其表示在滚动时显示的垂直长度,如:
m = matrix(runif(1000 * 4), ncol = 4, dimnames = list(NULL, letters[1:4])) m = cbind(id = seq_len(nrow(m)), round(m, 2)) datatable(m, extensions = 'Scroller', options = list( deferRender = TRUE, scrollY = 200, scroller = TRUE ))
以上均来自于https://rstudio.github.io/DT/的笔记,属于DT包的基础部分,详细的options参数可以查https://datatables.net/reference/option/,DT包跟shiny结合使用是一个非常棒的选择。
本文出自于http://www.bioinfo-scrounger.com转载请注明出处