Stargazer的Rmarkdown:如果align设置为TRUE,LaTeX会出错

Ale*_*lex 5 r pandoc knitr r-markdown stargazer

我正在使用stargazer,我想LaTeX为一个简单的lm对象生成一个输出.问题是我无法设置align = TRUE而不会收到错误.

LaTeX错误:\浮点外的标题.

我查了一下,消息说错了.将Stargazer输出直接复制到Latex文档中可以正常工作.将其复制到rmarkdown文档中会产生相同的错误(这并不奇怪,但我只是想确定).在玩了一下后,我发现rmarkdown如果重要的星(*)被移除(或精确到^{***}),它就会起作用.但是,stargazer默认情况下会生成它们,它们也是输出的重要部分.

有没有办法让它发挥作用?

---
header-includes:
- \usepackage{dcolumn}
output: pdf_document
---

## R Markdown
```{r, include = FALSE}
library(stargazer)
df <- data.frame(x = 1:10 + rnorm(100),
                 y = 1:10 + rnorm(100))
reg <- lm(y ~ x, data = df)
```

```{r, results='asis', echo = FALSE}
stargazer(reg, header = FALSE, align = TRUE)
```
Run Code Online (Sandbox Code Playgroud)

dww*_*dww 3

在 Linux 系统上,将 stargazer 包装在invisibleor内部suppressMessages可以抑制渲染的垃圾。不幸的是,这个解决方案似乎不适用于 Windows 计算机。

---
header-includes:
- \usepackage{dcolumn}
output: pdf_document
---

## R Markdown
```{r, include = FALSE}

library(stargazer)
df <- data.frame(x = 1:10 + rnorm(100),
                 y = 1:10 + rnorm(100))
reg <- lm(y ~ x, data = df)
```

```{r, results='asis', echo = FALSE}
invisible(stargazer(reg, header = FALSE, align = TRUE))
# suppressMessages(stargazer(reg, header = FALSE, align = TRUE)) # also works
```
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

原因是(来自帮助页面)

stargazer 使用 cat() 输出表格的 LaTeX/HTML 代码或 ASCII 文本。为了进一步处理该输出,stargazer 还会以字符向量的形式无形地返回相同的输出。

我们使用suppressMessagesorinvisible来确保仅渲染第一个输出(由 cat 生成)。当 rmarkdown 尝试使用 渲染字符向量输出时,字符向量输出会变成垃圾print,而不是cat