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

时间:2017-06-09 11:59:12

标签: r r-markdown stargazer texreg

出于发布的目的,我经常需要PDF和HTML版本的工作,包括回归表,我想使用R Markdown。对于PDF,stargazertexreg包可以生成精彩的表格。现在尝试生成同样有吸引力的HTML输出,我面临着不同的问题。

  1. HTML输出的两种方法都是在注释中缺少重要的明星。由于它们是自动生成的,我不知道如何逃避它们。 (我认为这可能是一个小问题,因此我并不想将其分成单独的问题。) 注意: Sub -question已被回答here

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

  3. 我尝试了有希望的pander-solution,但自2014年以来它似乎不再起作用了。pixiedust也不是很令人满意,它最终变得有点手动而不是什么我想要。 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)
    ```
    

2 个答案:

答案 0 :(得分:3)

这是一个命题:创建一个检查输出格式的函数,然后使用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)
```

答案 1 :(得分:1)

in an answer to a related questionknitr 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)
```