问题
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.
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.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'
totype='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 intexreg
/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)
```
回答1:
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)
```
回答2:
As pointed out in an answer to a related question, knitr
1.18 introduced the following functions
knitr::is_html_output()
knitr::is_latex_output()
to check if the output is HTML or LaTeX. Adapting @scoa's excellent answer:
---
output: html_document
---
```{r}
report_regression <- function(model, ...){
if(knitr::is_html_output()){
require(texreg)
htmlreg(model, custom.note="%stars. htmlreg", ...)
} else if(knitr::is_latex_output()){
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)
```
来源:https://stackoverflow.com/questions/44457243/regression-tables-in-r-markdown-rmarkdown-html-pdf