Peter Verbeet
Peter Verbeet

Reputation: 1816

show html table (via xtable) in knitr-powered document

I am trying to figure out how to use xtable when creating html pages with knitr. My main reason to work with xtable is because I want to be able to rotate column names and/or rownames. This is my .rmd document:

---
output: html_document
---

```{r, echo=FALSE} 
library(xtable)
data(tli)
tli.table <- xtable(tli[1:10,])
align(tli.table) <- "|r|r|lp{3cm}l|r|"
tt1 <- print(tli.table, rotate.rownames=TRUE,
             rotate.colnames=TRUE, type =   "html")
```

```{r, echo=FALSE, results = 'asis'}
tt1
```   

When I knit this document to html with knit2html, the row and column names are messed up and the html code is echoed as well. What am I doing wrong? (or is there a better way to construct nicely laid out html tables through knitr?)

Upvotes: 3

Views: 1053

Answers (1)

Pablo Adames
Pablo Adames

Reputation: 644

Peter, I am also frustrated with the odd behaviour of xtable when recreating tables that used to work before but not in the new R Markdow v2 using pandoc for the conversion to html.

The most I could do with your table was make it render pretty but no local column alignment or column header rotation. To do this put all the code in one r chunk with the option results='asis'.

This worked for me using RStudio 0.98.1103, R version 3.1.3 (2015-03-09), Platform: x86_64-pc-linux-gnu (64-bit), Running under: Ubuntu precise (12.04.5 LTS), knitr_1.9, rmarkdown_0.5.1, and xtable_1.7-4:

Since you mention using knit2html (not available for R 3.1.3) please try my code in your installation and see if it still works. If so this might be a reason not to get latest versions just yet.

Using Knitr's Kable the headings appear consistent with the default alignment of right-justified for numeric columns and left-justified otherwise. Xtable's headings appear always to be centred and I can't find the option for changing this behaviour.

---
output:
html_document:
   self_contained: false
   theme: flatly
   keep_md: true
---
<style type="text/css">
table { max-width: 200%;
        border: 1px solid #ccc; }
th {    background-color: #000000;
        color: #ffffff;
        width: 2.5cm; }
td {    background-color: #dcdcdc }
</style>

```{r, echo=FALSE, results = 'asis'}
library(xtable)
data(tli)
tli.table <- xtable(tli[1:10,])
align(tli.table) <- "|r|r|lp{3cm}l|r|"
print(tli.table,
      rotate.rownames=F,
      rotate.colnames=F,
      type="html",
      include.rownames = F)
```

```{r via kable, echo=FALSE, results='markup'}
require(knitr)
kable(tli.table, format = "html", 
      padding = 0, 
      row.names=F,
      caption = "Via kable")
```

Upvotes: 3

Related Questions