R Markdown / rmarkdown 中的回归表 (html/pdf)

Regression Tables in R Markdown / rmarkdown (html/pdf)

出于出版目的,我经常需要 PDF 和 HTML 版本的作品,包括回归表,我想使用 R Markdown。对于 PDF,stargazertexreg 包会生成很棒的表格。现在尝试生成同样有吸引力的 HTML 输出,但我遇到了不同的问题。

  1. 这两种方法HTML的输出都是缺乏意义的星星在注释中。因为它们是自动生成的,所以我不知道如何逃避它们。 (我认为这可能是一个小问题,因此我不想将其拆分为单独的问题。) 注意: 子问题有已回答 .

  2. 在创建明确的输出之前,我经常需要更改我的数据或进行一些格式化。我觉得总是在 type='html'type='pdf' 之间手动切换选项很烦人。我想知道是否有更可行的方法来 组合 html/pdf 输出 ,例如texreg / stargazer 中的个案切换,输出是否整洁?

我试过有前途的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好像只指普通表

非常感谢任何帮助,谢谢!

以下是我在 HTML 和 PDF 中对 knitr 的尝试总结:

```{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)
```

这里有一个建议:制作一个检查输出格式的函数,然后根据此使用 stargazer 或 texreg。我们使用 opts_knit$get("rmarkdown.pandoc.to") 检查输出格式。

---
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)
```

正如所指出的, knitr 1.18 introduced以下函数

knitr::is_html_output()
knitr::is_latex_output()

检查输出是 HTML 还是 LaTeX。改编@scoa 的优秀答案:

---
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)
```