This function creates an HTML widget to display rectangular data (a matrix or data frame) using the JavaScript library DataTables, with a method for desctable
objects.
Usage
datatable(data, ...)
# S3 method for default
datatable(
data,
options = list(),
class = "display",
callback = DT::JS("return table;"),
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,
...
)
# S3 method for desctable
datatable(
data,
options = list(paging = F, info = F, search = list(), dom = "Brtip", fixedColumns =
T, fixedHeader = T, buttons = c("copy", "excel")),
class = "display",
callback = DT::JS("return table;"),
caption = NULL,
filter = c("none", "bottom", "top"),
escape = FALSE,
style = "default",
width = NULL,
height = NULL,
elementId = NULL,
fillContainer = getOption("DT.fillContainer", NULL),
autoHideNavigation = getOption("DT.autoHideNavigation", NULL),
selection = c("multiple", "single", "none"),
extensions = c("FixedHeader", "FixedColumns", "Buttons"),
plugins = NULL,
rownames = F,
digits = 2,
...
)
Arguments
- data
a data object (either a matrix or a data frame)
- ...
arguments passed to
format
.- options
a list of initialization options (see https://datatables.net/reference/option/); the character options wrapped in
JS()
will be treated as literal JavaScript code instead of normal character strings; you can also set options globally viaoptions(DT.options = list(...))
, and global options will be merged into thisoptions
argument if set- class
the CSS class(es) of the table; see https://datatables.net/manual/styling/classes
- callback
the body of a JavaScript callback function with the argument
table
to be applied to the DataTables instance (i.e.table
)- caption
the table caption; a character vector or a tag object generated from
htmltools::tags$caption()
- filter
whether/where to use column filters;
none
: no filters;bottom/top
: put column filters at the bottom/top of the table; range sliders are used to filter numeric/date/time columns, select lists are used for factor columns, and text input boxes are used for character columns; if you want more control over the styles of filters, you can provide a list to this argument of the formlist(position = 'top', clear = TRUE, plain = FALSE)
, whereclear
indicates whether you want the clear buttons in the input boxes, andplain
means if you want to use Bootstrap form styles or plain text input styles for the text input boxes- escape
whether to escape HTML entities in the table:
TRUE
means to escape the whole table, andFALSE
means not to escape it; alternatively, you can specify numeric column indices or column names to indicate which columns to escape, e.g.1:5
(the first 5 columns),c(1, 3, 4)
, orc(-1, -3)
(all columns except the first and third), orc('Species', 'Sepal.Length')
; since the row names take the first column to display, you should add the numeric column indices by one when usingrownames
- style
either
'auto'
,'default'
,'bootstrap'
, or'bootstrap4'
. If'auto'
, and a **bslib** theme is currently active, then bootstrap styling is used in a way that "just works" for the active theme. Otherwise, DataTables'default'
styling is used. If set explicitly to'bootstrap'
or'bootstrap4'
, one must take care to ensure Bootstrap's HTML dependencies (as well as Bootswatch themes, if desired) are included on the page. Note, when set explicitly, it's the user's responsibility to ensure that only one unique `style` value is used on the same page, if multiple DT tables exist, as different styling resources may conflict with each other.- width
Width/Height in pixels (optional, defaults to automatic sizing)
- height
Width/Height in pixels (optional, defaults to automatic sizing)
- elementId
An id for the widget (a random string by default).
- fillContainer
TRUE
to configure the table to automatically fill it's containing element. If the table can't fit fully into it's container then vertical and/or horizontal scrolling of the table cells will occur.- autoHideNavigation
TRUE
to automatically hide navigational UI (only display the table body) when the number of total records is less than the page size. Note, it only works on the client-side processing mode and the `pageLength` option should be provided explicitly.- selection
the row/column selection mode (single or multiple selection or disable selection) when a table widget is rendered in a Shiny app; alternatively, you can use a list of the form
list(mode = 'multiple', selected = c(1, 3, 8), target = 'row', selectable = c(-2, -3))
to pre-select rows and control the selectable range; the elementtarget
in the list can be'column'
to enable column selection, or'row+column'
to make it possible to select both rows and columns (click on the footer to select columns), or'cell'
to select cells. See details section for more info.- extensions
a character vector of the names of the DataTables extensions (https://datatables.net/extensions/index)
- plugins
a character vector of the names of DataTables plug-ins (https://rstudio.github.io/DT/plugins.html). Note that only those plugins supported by the
DT
package can be used here. You can see the available plugins by callingDT:::available_plugins()
- rownames
TRUE
(show row names) orFALSE
(hide row names) or a character vector of row names; by default, the row names are displayed in the first column of the table if exist (notNULL
)- digits
the desired number of digits after the decimal point (
format = "f"
) or significant digits (format = "g"
,= "e"
or= "fg"
).Default: 2 for integer, 4 for real numbers. If less than 0, the C default of 6 digits is used. If specified as more than 50, 50 will be used with a warning unless
format = "f"
where it is limited to typically 324. (Not more than 15--21 digits need be accurate, depending on the OS and compiler used. This limit is just a precaution against segfaults in the underlying C runtime.)
Note
You are recommended to escape the table content for security reasons (e.g. XSS attacks) when using this function in Shiny or any other dynamic web applications.
References
See https://rstudio.github.io/DT/ for the full documentation.
Examples
library(DT)
#>
#> Attaching package: ‘DT’
#> The following object is masked from ‘package:desctable’:
#>
#> datatable
# see the package vignette for examples and the link to website
vignette('DT', package = 'DT')
#> starting httpd help server ...
#> done
# some boring edge cases for testing purposes
m = matrix(nrow = 0, ncol = 5, dimnames = list(NULL, letters[1:5]))
datatable(m) # zero rows
datatable(as.data.frame(m))
m = matrix(1, dimnames = list(NULL, 'a'))
datatable(m) # one row and one column
datatable(as.data.frame(m))
m = data.frame(a = 1, b = 2, c = 3)
datatable(m)
datatable(as.matrix(m))
# dates
datatable(data.frame(
date = seq(as.Date("2015-01-01"), by = "day", length.out = 5), x = 1:5
))
datatable(data.frame(x = Sys.Date()))
datatable(data.frame(x = Sys.time()))
###