This vignette demonstrates how load the lemon package
automatically enables pretty printing of data frames with knitr’s
kable.
The beauty of defining the function
knit_print.data.frame is that when working with R Notebooks
in R, the editor can output the data frame dynamically, while ensuring
that the knitted document also has the
First we load some data and show the top.
## Murder Assault UrbanPop Rape
## Alabama 13.2 236 58 21.2
## Alaska 10.0 263 48 44.5
## Arizona 8.1 294 80 31.0
## Arkansas 8.8 190 50 19.5
## California 9.0 276 91 40.6
## Colorado 7.9 204 78 38.7
Now load lemon and set the lemon_print
functions.
The same view is now nicely printed!
```{r caption="Data frame is now printed using `kable`.",render=lemon_print}
head(USArrests)
```
| Murder | Assault | UrbanPop | Rape | |
|---|---|---|---|---|
| Alabama | 13.2 | 236 | 58 | 21.2 |
| Alaska | 10.0 | 263 | 48 | 44.5 |
| Arizona | 8.1 | 294 | 80 | 31.0 |
| Arkansas | 8.8 | 190 | 50 | 19.5 |
| California | 9.0 | 276 | 91 | 40.6 |
| Colorado | 7.9 | 204 | 78 | 38.7 |
Notice how we specified kable arguments directly as
chunk-options.
knitr uses a S3 generic function, knit_print, to print
objects. Method dispatching in
R means that by defining a function, say
knit_print.data.frame, calling knit_print(df)
will call our function if df was a data frame.
To have knitr use our function when outputting a data frame, we
define the function knit_print.data.frame (and similar for
data frames passed through dplyr functions, i.e tbl_df and
grouped_df).
Disabling the function is by usual chunk options,
render = normal_print. check ?knit_print.
Disabling the functions.
```{r normal_print,render=normal_print}
head(USArrests)
```
## Murder Assault UrbanPop Rape
## Alabama 13.2 236 58 21.2
## Alaska 10.0 263 48 44.5
## Arizona 8.1 294 80 31.0
## Arkansas 8.8 190 50 19.5
## California 9.0 276 91 40.6
## Colorado 7.9 204 78 38.7
You can still ask for kable.
```{r results='asis',render=normal_print}
kable(head(USArrests),caption='Normal `kable` usage.')
```
| Murder | Assault | UrbanPop | Rape | |
|---|---|---|---|---|
| Alabama | 13.2 | 236 | 58 | 21.2 |
| Alaska | 10.0 | 263 | 48 | 44.5 |
| Arizona | 8.1 | 294 | 80 | 31.0 |
| Arkansas | 8.8 | 190 | 50 | 19.5 |
| California | 9.0 | 276 | 91 | 40.6 |
| Colorado | 7.9 | 204 | 78 | 38.7 |
We have mentioned kable a couple of times. That is
because the lemon_print for data frames uses
kable of the knitr package.
Some common arguments:
caption: Table caption. See examples in
demonstration.align: Vector of column alignments with
'l', 'c', and 'r'. Or, a single
element, i.e. c('c','l','r') = 'clr').row.names: A logical value indicating whether to
include row names.col.names: A character vector of column names to be
used in the table.The second code block, when edited in RStudio, would look like this:
And, as
demonstrated, the rendered document has the data frame printed
nicely.
If we do not wish this behaviour, but still use
kable,
| Murder | Assault | UrbanPop | Rape | |
|---|---|---|---|---|
| Alabama | 13.2 | 236 | 58 | 21.2 |
| Alaska | 10.0 | 263 | 48 | 44.5 |
| Arizona | 8.1 | 294 | 80 | 31.0 |
| Arkansas | 8.8 | 190 | 50 | 19.5 |
| California | 9.0 | 276 | 91 | 40.6 |
| Colorado | 7.9 | 204 | 78 | 38.7 |
RStudio would look like this:
Summaries are nicely formatted, but these require setting the S3
method for table.
```{r kable.opts=list(caption='Summary tables are printed with some default options.')}
knit_print.table <- lemon_print
summary(USArrests)
```
| Murder | Assault | UrbanPop | Rape |
|---|---|---|---|
| Min. : 0.800 | Min. : 45.0 | Min. :32.00 | Min. : 7.30 |
| 1st Qu.: 4.075 | 1st Qu.:109.0 | 1st Qu.:54.50 | 1st Qu.:15.07 |
| Median : 7.250 | Median :159.0 | Median :66.00 | Median :20.10 |
| Mean : 7.788 | Mean :170.8 | Mean :65.54 | Mean :21.23 |
| 3rd Qu.:11.250 | 3rd Qu.:249.0 | 3rd Qu.:77.75 | 3rd Qu.:26.18 |
| Max. :17.400 | Max. :337.0 | Max. :91.00 | Max. :46.00 |
Cross-tabulations are however not nicely formatted.
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
## gear
## cyl 3 4 5
## 4 1 8 2
## 6 2 4 1
## 8 12 0 2
##
## Vedhæfter pakke: 'dplyr'
## Det følgende objekt er maskeret fra 'package:gridExtra':
##
## combine
## De følgende objekter er maskerede fra 'package:stats':
##
## filter, lag
## De følgende objekter er maskerede fra 'package:base':
##
## intersect, setdiff, setequal, union
```{r dplyr,kable.opts=list(caption='Also works on `dplyr` objects.')}
mtcars %>% group_by(cyl) %>% summarise(mean(disp))
```
| cyl | mean(disp) |
|---|---|
| 4 | 105.1364 |
| 6 | 183.3143 |
| 8 | 353.1000 |