为了发布,我经常需要PDF和HTML版本的工作,包括回归表,我想使用R Markdown。对于 PDF,stargazer
和texreg
包生成了精彩的表格。现在尝试生成同样有吸引力的 HTML 输出,我面临着不同的问题。
-
HTML输出的两种方法在注释中都缺少意义星号。由于它们是自动生成的,我不知道如何转义它们。(我认为这可能是一个小问题,因此我不想将其分成单独的问题。注意: 此处已回答子问题。 -
在创建明确的输出之前,我经常需要更改数据或进行一些格式化。我发现总是在
type='html'
和type='pdf'
之间手动切换选项很烦人。我想知道是否有更可行的方法来组合 html/pdf 输出,例如texreg
/stargazer
中的个案切换与整洁的输出?
我尝试了有前途的pander
解决方案,但自 2014 年以来它似乎不再有效。同样pixiedust
不是很令人满意,它最终变得有些手动,并不完全是我想要的。另一个示例似乎仅指普通表。
非常感谢任何帮助,谢谢!
以下是我在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 引入了以下功能
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)
```