Highlight cells in markdown tables
[This article was first published on rapporter, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
Although I have always wanted to add such feature to pander, a recent question on SO urged me to create some helper functions so that users could easily highlight some rows, columns or even just a few cells in a table and export the result to markdown, docx, pdf or any other fancy formats – right from R.Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.
The new helper functions can be found in the most recent version of
pander on GitHub and will soon get to CRAN too. Until then, please update pander to 0.3.5 with devtools:library(devtools)
install_github('pander', 'Rapporter')
But back to the topic,
pandoc.table gained a few new arguments to highlight cells in a table. These are:- emphasize.rows
- emphasize.cols
- emphasize.cells
- emphasize.strong.rows
- emphasize.strong.cols
- emphasize.strong.cells
emphasize would turn the affected cells to italic, while emphasize.strong would apply a bold style in the cell. Of course a cell can be italic and strong at the same time if both type of arguments would affect that.Arguments ending in
rows or cols take a vector (e.g. which columns or rows to emphasize in a table), while the cells argument take either a vector (for one dimensional “tables”) or an array-like data structure with two columns holding row and column indexes of cells to be emphasized — just like what which(..., arr.ind = TRUE) returns.It might be easier to present this feature with a few examples:
> pandoc.table(iris[1:3, ], emphasize.rows = 1, emphasize.cols = 2)
-------------------------------------------------------------------
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
-------------------------------------------------------------------
> pandoc.table(iris[1:3, ], emphasize.strong.cells = which(iris[1:3, ] > 3, arr.ind = TRUE))
-------------------------------------------------------------------
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
-------------------------------------------------------------------
Or with some helper functions not touching the
pandoc.table call:> t <- mtcars[1:3, 1:5]
> emphasize.cols(1)
> emphasize.rows(1)
> pandoc.table(t)
----------------------------------------------------
mpg cyl disp hp drat
------------------- ------ ----- ------ ----- ------
**Mazda RX4** *21* *6* *160* *110* *3.9*
**Mazda RX4 Wag** *21* 6 160 110 3.9
**Datsun 710** *22.8* 4 108 93 3.85
----------------------------------------------------
> emphasize.strong.cells(which(t > 20, arr.ind = TRUE))
> pander(t)
---------------------------------------------------------
mpg cyl disp hp drat
------------------- -------- ----- ------- ------- ------
**Mazda RX4** **21** 6 **160** **110** 3.9
**Mazda RX4 Wag** **21** 6 **160** **110** 3.9
**Datsun 710** **22.8** 4 **108** **93** 3.85
---------------------------------------------------------
As you can see above, there is no need to directly call
pandoc.table in most of the cases as pander being a generic S3 method would already know if pandoc.table is to be called from the list of Pandoc-related functions.So the functions can be also used without calling
pandoc.table with the above described parameters, just like some other helpers that can be useful while creating a report – with knitr or any other backend. For example running Pandoc.brew on the following chunk:<%=
set.seed(7)
m <- mtcars[sample(1:32, 5), 1:5]
set.caption("Fast cars")
set.alignment('center')
emphasize.strong.rows(which(m$hp > 100))
m
%>
Would result in a markdown dokument:
--------------------------------------------------------------
mpg cyl disp hp drat
-------------------- -------- ----- --------- ------- --------
**Volvo 142E** **21.4** **4** **121** **109** **4.11**
**Merc 450SL** **17.3** **8** **275.8** **180** **3.07**
**Hornet 4 Drive** **21.4** **6** **258** **110** **3.08**
**Datsun 710** 22.8 4 108 93 3.85
**Duster 360** **14.3** **8** **360** **245** **3.21**
--------------------------------------------------------------
Table: Fast cars
Or directly in a docx, odt or pdf file if calling
Pandoc.brew with the convert argument. See the relevant docs for more details.To leave a comment for the author, please follow the link and comment on their blog: rapporter.
R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.