jaySf jaySf -4 years ago 139
R Question

Regression Tables in R Markdown (html/pdf)

For the purpose of publishing I often need both a PDF and a HTML version of my work including regression tables and I want to use R Markdown. For PDF the

stargazer
and the
texreg
packages produce wonderful tables. Now trying to generate an equally attractive HTML output I'm facing different issues.


  1. Both methods for HTML output are lacking significance stars in the notes. As they are automatically generated I don't know how to escape them. (I think this might be a minor problem and therefore I didn't want to split it into seperate questions.) Note: Sub-question has been answered here.

  2. Before creating the definite output I often have to change my data or do some formatting. I find it quite annoying to always flip-flop the options between
    type='html'
    to
    type='pdf'
    manually. I wonder if there might be a more feasible way to combine the html/pdf output , e.g. a case-to-case switch in
    texreg
    /
    stargazer
    with a tidy output?



I tried the promising
pander
-solution
, but it seems not to be working anymore since 2014. Also
pixiedust
ist not very satisfying, it's becoming somewhat manual at the end and not exactly what I want. An other example seems to refer only to normal tables.

Any help is extremely appreciated, thanks!

Here is a summary of my attempts for
knitr
in HTML and PDF:

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
```{r table, results = "asis"}
library(car)
lm1 <- lm(prestige ~ income + education, data=Duncan)

## html
# stargazer
library(stargazer)
stargazer(lm1, type="html", notes="stargazer html")
# htmlreg
library(texreg)
htmlreg(lm1, custom.note="%stars. htmlreg")

## pdf/latex
# stargazer
stargazer(lm1, notes="stargazer latex")
# texreg
texreg::texreg(list(lm1), custom.note="%stars. texreg")

# pixiedust
library(pixiedust)
dust(lm1, caption = "pixiedust")

# pander
library(memisc)
library(pander)
lm1_table <- mtable(lm1)
# pander(lm1_table, style="rmarkdown") # not working
pander(lm1)
```

Answer Source

Here is a proposition: make a function that checks the output format and then uses either stargazer or texreg depending on this. We use opts_knit$get("rmarkdown.pandoc.to") to check the output format.

---
output: html_document
---

```{r setup, include=FALSE}
library(knitr)
opts_chunk$set(echo = TRUE)
rmd_format <- opts_knit$get("rmarkdown.pandoc.to")
## returns "html" or "latex"

```

```{r}

report_regression <- function(model, format, ...){
  if(format == "html"){
    require(texreg)
    htmlreg(model, custom.note="%stars. htmlreg", ...)
  } else if(format == "latex"){
    require(stargazer)
    stargazer(model, notes="stargazer html", ...)
  } else {
   print("This only works with latex and html output") 
  }
}
```

```{r table, results = "asis"}
library(car)
lm1 <- lm(prestige ~ income + education, data=Duncan)

report_regression(lm1, format = rmd_format)
```
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download