23 février 2018

Motivation

About R Markdown

  • Markdown: a simple formatting syntax for authoring HTML, PDF, and MS Word documents.
  • R Markdown: a simple way to embed R chuncks in your markdown (see http://rmarkdown.rstudio.com and Antoine's presentation for more details).
  • Knitting (Ctrl+Shift+K): generates a document with both content and output of embedded R code chunks.

\(\Rightarrow\) Very useful for reproducible research and to explore data

Today's goal

  • Demonstrate various data frame display methods
  • Explore the potential of the DT (DataTables) package

About DT

  • DT is an R interface to the JavaScript library DataTables
  • Data frames can be displayed as tables on HTML pages and DT provides pagination, filtering, sorting, etc.
  • A bit awkward in presentations but very useful for full-fledged HTML reports.
  • See http://rstudio.github.io/DT/ for details

Printing data frame: ugly default

iris
##     Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 1            5.1         3.5          1.4         0.2     setosa
## 2            4.9         3.0          1.4         0.2     setosa
## 3            4.7         3.2          1.3         0.2     setosa
## 4            4.6         3.1          1.5         0.2     setosa
## 5            5.0         3.6          1.4         0.2     setosa
## 6            5.4         3.9          1.7         0.4     setosa
## 7            4.6         3.4          1.4         0.3     setosa
## 8            5.0         3.4          1.5         0.2     setosa
## 9            4.4         2.9          1.4         0.2     setosa
## 10           4.9         3.1          1.5         0.1     setosa
## 11           5.4         3.7          1.5         0.2     setosa
## 12           4.8         3.4          1.6         0.2     setosa
## 13           4.8         3.0          1.4         0.1     setosa
## 14           4.3         3.0          1.1         0.1     setosa
## 15           5.8         4.0          1.2         0.2     setosa
## 16           5.7         4.4          1.5         0.4     setosa
## 17           5.4         3.9          1.3         0.4     setosa
## 18           5.1         3.5          1.4         0.3     setosa
## 19           5.7         3.8          1.7         0.3     setosa
## 20           5.1         3.8          1.5         0.3     setosa
## 21           5.4         3.4          1.7         0.2     setosa
## 22           5.1         3.7          1.5         0.4     setosa
## 23           4.6         3.6          1.0         0.2     setosa
## 24           5.1         3.3          1.7         0.5     setosa
## 25           4.8         3.4          1.9         0.2     setosa
## 26           5.0         3.0          1.6         0.2     setosa
## 27           5.0         3.4          1.6         0.4     setosa
## 28           5.2         3.5          1.5         0.2     setosa
## 29           5.2         3.4          1.4         0.2     setosa
## 30           4.7         3.2          1.6         0.2     setosa
## 31           4.8         3.1          1.6         0.2     setosa
## 32           5.4         3.4          1.5         0.4     setosa
## 33           5.2         4.1          1.5         0.1     setosa
## 34           5.5         4.2          1.4         0.2     setosa
## 35           4.9         3.1          1.5         0.2     setosa
## 36           5.0         3.2          1.2         0.2     setosa
## 37           5.5         3.5          1.3         0.2     setosa
## 38           4.9         3.6          1.4         0.1     setosa
## 39           4.4         3.0          1.3         0.2     setosa
## 40           5.1         3.4          1.5         0.2     setosa
## 41           5.0         3.5          1.3         0.3     setosa
## 42           4.5         2.3          1.3         0.3     setosa
## 43           4.4         3.2          1.3         0.2     setosa
## 44           5.0         3.5          1.6         0.6     setosa
## 45           5.1         3.8          1.9         0.4     setosa
## 46           4.8         3.0          1.4         0.3     setosa
## 47           5.1         3.8          1.6         0.2     setosa
## 48           4.6         3.2          1.4         0.2     setosa
## 49           5.3         3.7          1.5         0.2     setosa
## 50           5.0         3.3          1.4         0.2     setosa
## 51           7.0         3.2          4.7         1.4 versicolor
## 52           6.4         3.2          4.5         1.5 versicolor
## 53           6.9         3.1          4.9         1.5 versicolor
## 54           5.5         2.3          4.0         1.3 versicolor
## 55           6.5         2.8          4.6         1.5 versicolor
## 56           5.7         2.8          4.5         1.3 versicolor
## 57           6.3         3.3          4.7         1.6 versicolor
## 58           4.9         2.4          3.3         1.0 versicolor
## 59           6.6         2.9          4.6         1.3 versicolor
## 60           5.2         2.7          3.9         1.4 versicolor
## 61           5.0         2.0          3.5         1.0 versicolor
## 62           5.9         3.0          4.2         1.5 versicolor
## 63           6.0         2.2          4.0         1.0 versicolor
## 64           6.1         2.9          4.7         1.4 versicolor
## 65           5.6         2.9          3.6         1.3 versicolor
## 66           6.7         3.1          4.4         1.4 versicolor
## 67           5.6         3.0          4.5         1.5 versicolor
## 68           5.8         2.7          4.1         1.0 versicolor
## 69           6.2         2.2          4.5         1.5 versicolor
## 70           5.6         2.5          3.9         1.1 versicolor
## 71           5.9         3.2          4.8         1.8 versicolor
## 72           6.1         2.8          4.0         1.3 versicolor
## 73           6.3         2.5          4.9         1.5 versicolor
## 74           6.1         2.8          4.7         1.2 versicolor
## 75           6.4         2.9          4.3         1.3 versicolor
## 76           6.6         3.0          4.4         1.4 versicolor
## 77           6.8         2.8          4.8         1.4 versicolor
## 78           6.7         3.0          5.0         1.7 versicolor
## 79           6.0         2.9          4.5         1.5 versicolor
## 80           5.7         2.6          3.5         1.0 versicolor
## 81           5.5         2.4          3.8         1.1 versicolor
## 82           5.5         2.4          3.7         1.0 versicolor
## 83           5.8         2.7          3.9         1.2 versicolor
## 84           6.0         2.7          5.1         1.6 versicolor
## 85           5.4         3.0          4.5         1.5 versicolor
## 86           6.0         3.4          4.5         1.6 versicolor
## 87           6.7         3.1          4.7         1.5 versicolor
## 88           6.3         2.3          4.4         1.3 versicolor
## 89           5.6         3.0          4.1         1.3 versicolor
## 90           5.5         2.5          4.0         1.3 versicolor
## 91           5.5         2.6          4.4         1.2 versicolor
## 92           6.1         3.0          4.6         1.4 versicolor
## 93           5.8         2.6          4.0         1.2 versicolor
## 94           5.0         2.3          3.3         1.0 versicolor
## 95           5.6         2.7          4.2         1.3 versicolor
## 96           5.7         3.0          4.2         1.2 versicolor
## 97           5.7         2.9          4.2         1.3 versicolor
## 98           6.2         2.9          4.3         1.3 versicolor
## 99           5.1         2.5          3.0         1.1 versicolor
## 100          5.7         2.8          4.1         1.3 versicolor
## 101          6.3         3.3          6.0         2.5  virginica
## 102          5.8         2.7          5.1         1.9  virginica
## 103          7.1         3.0          5.9         2.1  virginica
## 104          6.3         2.9          5.6         1.8  virginica
## 105          6.5         3.0          5.8         2.2  virginica
## 106          7.6         3.0          6.6         2.1  virginica
## 107          4.9         2.5          4.5         1.7  virginica
## 108          7.3         2.9          6.3         1.8  virginica
## 109          6.7         2.5          5.8         1.8  virginica
## 110          7.2         3.6          6.1         2.5  virginica
## 111          6.5         3.2          5.1         2.0  virginica
## 112          6.4         2.7          5.3         1.9  virginica
## 113          6.8         3.0          5.5         2.1  virginica
## 114          5.7         2.5          5.0         2.0  virginica
## 115          5.8         2.8          5.1         2.4  virginica
## 116          6.4         3.2          5.3         2.3  virginica
## 117          6.5         3.0          5.5         1.8  virginica
## 118          7.7         3.8          6.7         2.2  virginica
## 119          7.7         2.6          6.9         2.3  virginica
## 120          6.0         2.2          5.0         1.5  virginica
## 121          6.9         3.2          5.7         2.3  virginica
## 122          5.6         2.8          4.9         2.0  virginica
## 123          7.7         2.8          6.7         2.0  virginica
## 124          6.3         2.7          4.9         1.8  virginica
## 125          6.7         3.3          5.7         2.1  virginica
## 126          7.2         3.2          6.0         1.8  virginica
## 127          6.2         2.8          4.8         1.8  virginica
## 128          6.1         3.0          4.9         1.8  virginica
## 129          6.4         2.8          5.6         2.1  virginica
## 130          7.2         3.0          5.8         1.6  virginica
## 131          7.4         2.8          6.1         1.9  virginica
## 132          7.9         3.8          6.4         2.0  virginica
## 133          6.4         2.8          5.6         2.2  virginica
## 134          6.3         2.8          5.1         1.5  virginica
## 135          6.1         2.6          5.6         1.4  virginica
## 136          7.7         3.0          6.1         2.3  virginica
## 137          6.3         3.4          5.6         2.4  virginica
## 138          6.4         3.1          5.5         1.8  virginica
## 139          6.0         3.0          4.8         1.8  virginica
## 140          6.9         3.1          5.4         2.1  virginica
## 141          6.7         3.1          5.6         2.4  virginica
## 142          6.9         3.1          5.1         2.3  virginica
## 143          5.8         2.7          5.1         1.9  virginica
## 144          6.8         3.2          5.9         2.3  virginica
## 145          6.7         3.3          5.7         2.5  virginica
## 146          6.7         3.0          5.2         2.3  virginica
## 147          6.3         2.5          5.0         1.9  virginica
## 148          6.5         3.0          5.2         2.0  virginica
## 149          6.2         3.4          5.4         2.3  virginica
## 150          5.9         3.0          5.1         1.8  virginica

Using kable: much better

knitr::kable(iris)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5.0 3.4 1.5 0.2 setosa
4.4 2.9 1.4 0.2 setosa
4.9 3.1 1.5 0.1 setosa
5.4 3.7 1.5 0.2 setosa
4.8 3.4 1.6 0.2 setosa
4.8 3.0 1.4 0.1 setosa
4.3 3.0 1.1 0.1 setosa
5.8 4.0 1.2 0.2 setosa
5.7 4.4 1.5 0.4 setosa
5.4 3.9 1.3 0.4 setosa
5.1 3.5 1.4 0.3 setosa
5.7 3.8 1.7 0.3 setosa
5.1 3.8 1.5 0.3 setosa
5.4 3.4 1.7 0.2 setosa
5.1 3.7 1.5 0.4 setosa
4.6 3.6 1.0 0.2 setosa
5.1 3.3 1.7 0.5 setosa
4.8 3.4 1.9 0.2 setosa
5.0 3.0 1.6 0.2 setosa
5.0 3.4 1.6 0.4 setosa
5.2 3.5 1.5 0.2 setosa
5.2 3.4 1.4 0.2 setosa
4.7 3.2 1.6 0.2 setosa
4.8 3.1 1.6 0.2 setosa
5.4 3.4 1.5 0.4 setosa
5.2 4.1 1.5 0.1 setosa
5.5 4.2 1.4 0.2 setosa
4.9 3.1 1.5 0.2 setosa
5.0 3.2 1.2 0.2 setosa
5.5 3.5 1.3 0.2 setosa
4.9 3.6 1.4 0.1 setosa
4.4 3.0 1.3 0.2 setosa
5.1 3.4 1.5 0.2 setosa
5.0 3.5 1.3 0.3 setosa
4.5 2.3 1.3 0.3 setosa
4.4 3.2 1.3 0.2 setosa
5.0 3.5 1.6 0.6 setosa
5.1 3.8 1.9 0.4 setosa
4.8 3.0 1.4 0.3 setosa
5.1 3.8 1.6 0.2 setosa
4.6 3.2 1.4 0.2 setosa
5.3 3.7 1.5 0.2 setosa
5.0 3.3 1.4 0.2 setosa
7.0 3.2 4.7 1.4 versicolor
6.4 3.2 4.5 1.5 versicolor
6.9 3.1 4.9 1.5 versicolor
5.5 2.3 4.0 1.3 versicolor
6.5 2.8 4.6 1.5 versicolor
5.7 2.8 4.5 1.3 versicolor
6.3 3.3 4.7 1.6 versicolor
4.9 2.4 3.3 1.0 versicolor
6.6 2.9 4.6 1.3 versicolor
5.2 2.7 3.9 1.4 versicolor
5.0 2.0 3.5 1.0 versicolor
5.9 3.0 4.2 1.5 versicolor
6.0 2.2 4.0 1.0 versicolor
6.1 2.9 4.7 1.4 versicolor
5.6 2.9 3.6 1.3 versicolor
6.7 3.1 4.4 1.4 versicolor
5.6 3.0 4.5 1.5 versicolor
5.8 2.7 4.1 1.0 versicolor
6.2 2.2 4.5 1.5 versicolor
5.6 2.5 3.9 1.1 versicolor
5.9 3.2 4.8 1.8 versicolor
6.1 2.8 4.0 1.3 versicolor
6.3 2.5 4.9 1.5 versicolor
6.1 2.8 4.7 1.2 versicolor
6.4 2.9 4.3 1.3 versicolor
6.6 3.0 4.4 1.4 versicolor
6.8 2.8 4.8 1.4 versicolor
6.7 3.0 5.0 1.7 versicolor
6.0 2.9 4.5 1.5 versicolor
5.7 2.6 3.5 1.0 versicolor
5.5 2.4 3.8 1.1 versicolor
5.5 2.4 3.7 1.0 versicolor
5.8 2.7 3.9 1.2 versicolor
6.0 2.7 5.1 1.6 versicolor
5.4 3.0 4.5 1.5 versicolor
6.0 3.4 4.5 1.6 versicolor
6.7 3.1 4.7 1.5 versicolor
6.3 2.3 4.4 1.3 versicolor
5.6 3.0 4.1 1.3 versicolor
5.5 2.5 4.0 1.3 versicolor
5.5 2.6 4.4 1.2 versicolor
6.1 3.0 4.6 1.4 versicolor
5.8 2.6 4.0 1.2 versicolor
5.0 2.3 3.3 1.0 versicolor
5.6 2.7 4.2 1.3 versicolor
5.7 3.0 4.2 1.2 versicolor
5.7 2.9 4.2 1.3 versicolor
6.2 2.9 4.3 1.3 versicolor
5.1 2.5 3.0 1.1 versicolor
5.7 2.8 4.1 1.3 versicolor
6.3 3.3 6.0 2.5 virginica
5.8 2.7 5.1 1.9 virginica
7.1 3.0 5.9 2.1 virginica
6.3 2.9 5.6 1.8 virginica
6.5 3.0 5.8 2.2 virginica
7.6 3.0 6.6 2.1 virginica
4.9 2.5 4.5 1.7 virginica
7.3 2.9 6.3 1.8 virginica
6.7 2.5 5.8 1.8 virginica
7.2 3.6 6.1 2.5 virginica
6.5 3.2 5.1 2.0 virginica
6.4 2.7 5.3 1.9 virginica
6.8 3.0 5.5 2.1 virginica
5.7 2.5 5.0 2.0 virginica
5.8 2.8 5.1 2.4 virginica
6.4 3.2 5.3 2.3 virginica
6.5 3.0 5.5 1.8 virginica
7.7 3.8 6.7 2.2 virginica
7.7 2.6 6.9 2.3 virginica
6.0 2.2 5.0 1.5 virginica
6.9 3.2 5.7 2.3 virginica
5.6 2.8 4.9 2.0 virginica
7.7 2.8 6.7 2.0 virginica
6.3 2.7 4.9 1.8 virginica
6.7 3.3 5.7 2.1 virginica
7.2 3.2 6.0 1.8 virginica
6.2 2.8 4.8 1.8 virginica
6.1 3.0 4.9 1.8 virginica
6.4 2.8 5.6 2.1 virginica
7.2 3.0 5.8 1.6 virginica
7.4 2.8 6.1 1.9 virginica
7.9 3.8 6.4 2.0 virginica
6.4 2.8 5.6 2.2 virginica
6.3 2.8 5.1 1.5 virginica
6.1 2.6 5.6 1.4 virginica
7.7 3.0 6.1 2.3 virginica
6.3 3.4 5.6 2.4 virginica
6.4 3.1 5.5 1.8 virginica
6.0 3.0 4.8 1.8 virginica
6.9 3.1 5.4 2.1 virginica
6.7 3.1 5.6 2.4 virginica
6.9 3.1 5.1 2.3 virginica
5.8 2.7 5.1 1.9 virginica
6.8 3.2 5.9 2.3 virginica
6.7 3.3 5.7 2.5 virginica
6.7 3.0 5.2 2.3 virginica
6.3 2.5 5.0 1.9 virginica
6.5 3.0 5.2 2.0 virginica
6.2 3.4 5.4 2.3 virginica
5.9 3.0 5.1 1.8 virginica

Using datatable: even better

DT::datatable(iris)

The Basics

Getting started with DT

We first new to install DT

install.packages("DT")
## or for the dev version
devtools::install_github('rstudio/DT')

and then load it, to avoid typing DT::, as usual and add dplyr (because everybody loves dplyr)

library(DT)
library(dplyr)

Main function (many options!!)

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)

We'll see filter, options and extensions and different styling options.

(Mandatory) Hello World

We already did it but still…

datatable(iris)

Your Turn (I)

Download the example dataset and print it nicely

example <- read.csv(file = "example_table.csv", dec = ",", stringsAsFactors = FALSE)
##  example <- read.csv(file = "http://genome.jouy.inra.fr/~mmariadasso/HappyR/example_table.csv", dec = ",", stringsAsFactors = FALSE)

Class

The class argument allows you to customize cell style. All options are on https://datatables.net/manual/styling/classes

Some important ones are:

  • stripe: row-striping
  • hover: row higlighting on mouse over
  • row-border / cell-border: borders only at top and bottom of the table or around all cells
  • order-column: highlight the column currently used for ordering
  • nowrap: disable line wrapping (for long text)
  • compact: increase density

The default style class = "display" corresponds to stripe, hover, row-border and order-column

Class: example

datatable(iris, class = "compact cell-border")

Show/Hide Rownames

datatable(head(mtcars, 3))
datatable(head(mtcars, 3), rownames = FALSE)

Change Colnames

  • Specify all names
## By default, forgoes the 'rownames' column
datatable(head(iris), 
          colnames = c('Here', 'Are', 'Some', 'New', 'Names'))
  • Specify some names
## But rownames is still the first column
datatable(head(iris), 
          colnames = c('foo' = 'Sepal.Length', 'bar' = 'Sepal.Width'))
  • Specify some names (bis)
datatable(head(iris), 
          colnames = c('foo' = 4, 'bar' = 5))

Change Colnames (Cont'd)

All names


Some Names


Some Other Names

Custom Header

# a custom table container
sketch = htmltools::withTags(table(
  class = 'display',
  thead(
    tr(
      th(rowspan = 2, 'ID'),
      th(rowspan = 2, 'Species'),
      th(colspan = 2, 'Sepal'),
      th(colspan = 2, 'Petal')
    ),
    tr(
      # lapply(rep(c('Length', 'Width'), 2), th) # for Paul/Michel
      th("Length"),
      th("Width"),
      th("Length"),
      th("Width")
    )
  )
))

Custom Header (Cont'd)

print(sketch)
## <table class="display">
##   <thead>
##     <tr>
##       <th rowspan="2">ID</th>
##       <th rowspan="2">Species</th>
##       <th colspan="2">Sepal</th>
##       <th colspan="2">Petal</th>
##     </tr>
##     <tr>
##       <th>Length</th>
##       <th>Width</th>
##       <th>Length</th>
##       <th>Width</th>
##     </tr>
##   </thead>
## </table>

Custom Header (Cont'd)

## Note that sketch has a header for rownames
datatable(iris[1:3, c(5, 1:4)], container = sketch)


Automatic header generated by tableHeader(iris)

Your Turn (II)

Create a nicer header for the example dataset.

Filter

Column filters are enabled by changing the default filter="none" to filter="top" or filter="bottom"

datatable(iris[c(1:2, 149:150), c(1:3, 5)], filter = "top", 
          options = list(dom = "t"))

Options

Initialization options

DataTable has a large number of initialization options http://datatables.net/reference/option that can be set using options

datatable(head(iris, 32), options = list(
  pageLength = 4, lengthMenu = c(4, 8, 16, 32)
))

Examples: Sorting

datatable(head(mtcars[, 1:6], 30), options = list(
  order = list(list(2, 'asc'), list(4, 'desc'))
))

Examples: Sorting (Cont'd)

datatable(head(mtcars[, 1:6], 30), rownames = FALSE, options = list(
  order = list(list(2, 'asc'), list(4, 'desc'))
))

Did you notice?

  • The order is different
  • In javascript, columns are numbered from \(0\) to \(n-1\)
  • Here rownames act as the fist column

Important option: DOM

DataTable adds a number of elements to or around the table. Their nature and order is determined by dom

  • l : length changing input control
  • f : filtering input
  • t : the table (you want this one)
  • i : information summary
  • p : pagination control
  • r : processing display elements
  • B : Buttons (used with Buttons extension)

DOM: examples

datatable(head(iris, 2), options = list(dom = "t"))


datatable(head(iris, 2), options = list(dom = "ft"))

DOM: Order Matters

datatable(head(iris, 2), options = list(dom = "ft"))


datatable(head(iris, 2), options = list(dom = "tf"))

DOM: last examples

Elements of DOM can be duplicated

datatable(head(iris, 5), options = list(dom = "plitil"))

Useful Trick: hide column(s)

Must specify column(s) by position (not name)

datatable(iris %>% head(5), 
          options=list(columnDefs = list(list(visible=FALSE, targets=1:2)), 
                       dom = "t"))

Your Turn (III)

Sort the example dataset by Site, Phylum and increasing baseline fold-change.

Functions

Formattings functions

Not all tables are created equal

set.seed(seed = 20171019)
jouy <- data.frame(unit   = c("MaIAGE", "GABI", "Micalis"), 
                   budget = c(-1000000, 3000000, 5000000), 
                   DU     = c("F", "F", "M"),
                   ETP    = c(55, 120, 300), 
                   hum    = runif(3, 0, 1))
datatable(jouy, options = list(dom = "t"))

format* functions

DT provides you with various formatting helper functions

  • formatCurrency (with currency, digits and before arguments)
  • formatRound (with digits argument)
  • formatPercentage (with digits argument)
tab <- datatable(jouy, options = list(dom = "t")) %>% 
  formatCurrency("budget", "€", before = FALSE) %>% 
  formatPercentage(5, digits = 2); tab

formatStyle and style* functions

formatStyle allows you to apply a class to CSS styles to columns. CSS styles are named in camelCase style (i.e. font-weight becomes fontWeight)

tab %>% formatStyle("unit", color = "orange", 
                    fontWeight = "bold", backgroundColor = "black")

style* functions

style* allow you to apply conditional styling to the cells

  • styleInterval (with cuts and values arguments)
  • styleColorBar (with data and color arguments)
  • styleEqual (with levels and values arguments)

For power users, the formattable package provides many formatting function that are compatible with DT

Conditional formatting

tab %>% 
  formatStyle('budget', color = styleInterval(0, c("darkred", "darkgreen")), 
              fontWeight = "bold") %>% 
  formatStyle('hum', background = styleColorBar(jouy$hum, "lightblue"))

Cross-columns formatting

tab %>% formatStyle('unit', valueColumns = "DU",
                    backgroundColor = styleEqual(c("M", "F"),
                                                 c("lightblue", "pink")))

Format Whole Rows

tab %>% formatStyle('DU', target = "row", 
                    backgroundColor = styleEqual(c("M", "F"),
                                                 c("lightblue", "pink")))

Your Turn (IV)

Format the example dataset to highlight some OTUs:

  • use bold font for significant OTUs at time T2
  • use red (pink) / blue (lightblue) background color

Your Turn (V)

Format the example dataset to highlight some OTUs:

  • use bold font for significant OTUs at time T2
  • use red (pink) / blue (lightblue) background color only for significant OTUs
  • hint: you may need to define a new column with the product of sign(lfc) and padj

Your Turn (VI)

Add Column-levels filters to make table searchable

Extensions

DataTables extension

Extension provide additional features to datatable. Some nice ones are

  • Buttons: add export buttons to your table
  • ColReorder: click and drag columns to reorder columns
  • RowReorder: click and drag columns to reorder rows
  • Responsive: datable automatically adjust the number of columns to page width

Buttons

You need to have B in your dom option for it to work

datatable(jouy, extensions = 'Buttons', 
          options = list(dom = 'Bftip',
                         buttons = c('copy', 'csv', 'excel', 'pdf', 'print'))
)

ColReorder

You need to add colRorder = TRUE to the options

datatable(jouy, extensions = 'ColReorder', 
          options = list(colReorder = TRUE))

RowReorder

You need to add rowRorder = TRUE to the options

datatable(jouy, extensions = 'RowReorder', 
          options = list(rowReorder = TRUE))

Responsive

No need to add anything to the options

datatable(mtcars, extensions = 'Responsive')

Combining Extensions

You can combine all previous extensions using named lists. You need to add = NULL as none of them requires optional arguments.

tab <- datatable(jouy, 
                 extensions = list(
                   "Buttons" = NULL, 
                   "ColReorder" = NULL, 
                   "RowReorder" = NULL, 
                   "Responsive" = NULL
                 ), 
                 options = list(
                   dom = "Bftip", 
                   colReorder = TRUE, 
                   rowReorder = TRUE, 
                   buttons = c('copy', 'csv', 'excel', 'pdf', 'print')
                 ))

Combining Extensions (Cont'd)

tab

Final Formatting

tab %>% formatCurrency("budget", currency = "€", before = FALSE) %>% 
  formatPercentage("hum", digits = 2) %>% 
  formatStyle("unit", color = "orange", backgroundColor = "black", fontWeight = "bold") %>% 
  formatStyle("hum", background = styleColorBar(jouy$hum, "lightblue")) %>% 
  formatStyle("budget", color = styleInterval(0, c("darkred", "darkgreen")), fontWeight = "bold") %>% 
  formatStyle("DU", backgroundColor = styleEqual(c("M", "F"), c("lightblue", "pink"))) 

Your turn (VII)

Add extensions to dazzle your biologist colleagues with your technical prowess

A few ending words

Custom formatting

styleColorBar is not so good for humidity level:

  • it rescales all values in the \([0, 1]\)
  • but we already have values in \([0, 1]\)!!
styleColorBarPercent <- function(data, color, angle = 90) {
    rg = range(data, na.rm = TRUE, finite = TRUE)
    stopifnot(rg[1] > 0, rg[2] < 1)
    JS(sprintf("isNaN(parseFloat(value)) || value <= 0 ? '' : 'linear-gradient(%sdeg, transparent ' + (1 - value) * 100 + '%%, %s ' + (1 - value) * 100 + '%%)'", angle, color))
}

Final Formatting (Cont'd)

tab %>% formatCurrency("budget", currency = "€", before = FALSE) %>% 
  formatPercentage("hum", digits = 2) %>% 
  formatStyle("unit", color = "orange", backgroundColor = "black", fontWeight = "bold") %>% 
  formatStyle("hum", background = styleColorBarPercent(jouy$hum, "lightblue")) %>% 
  formatStyle("budget", color = styleInterval(0, c("darkred", "darkgreen")), fontWeight = "bold") %>% 
  formatStyle("DU", backgroundColor = styleEqual(c("M", "F"), c("lightblue", "pink"))) 

A note about formattable

We could have achieved the same result (for the last part) with formattable

library(formattable)
formattable(jouy, list(hum = color_bar("lightblue"))) %>% 
  as.datatable(extensions = "Buttons",
               options = list(dom = "Bpt",
                              buttons = c('csv', 'excel')
                 ))

Feedback

Feedback

Questions?