【问题标题】:Regression Tables in R Markdown / rmarkdown (html/pdf)R Markdown / rmarkdown (html/pdf) 中的回归表
【发布时间】:2017-06-09 11:59:12
【问题描述】:

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

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

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

我尝试了有前途的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)
```

【问题讨论】:

标签: r r-markdown stargazer texreg


【解决方案1】:

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

【讨论】:

  • 太棒了,谢谢!!我很高兴定制甚至可以在块中使用函数:lm1 &lt;- lm(prestige ~ income + education, data=Duncan); lm2 &lt;- lm(prestige ~ income + education + income:education, data=Duncan); report_regression(list(lm1, lm2), format = rmd_format, custom.model.names = c("West", "East"), custom.coef.names = c("(C. 1)", "I. 1", "E. 1", "Inter. 1"), custom.note = "%stars. foo", star.symbol = "&amp;#42;") 我建议将函数中的lm1 更改为model,而不是使用texreg 而不是stargazer,因为它更复杂。 stargazer 仍然是控制台的最佳选择。
【解决方案2】:

如指出in an answer to a related question, 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)
```

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2014-03-17
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 2020-08-25
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    相关资源
    最近更新 更多