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

7
我正在使用 stargazer,想要为一个简单的 lm 对象生成 LaTeX 输出。问题是,如果不出现错误,我不能设置 align = TRUE

LaTeX错误:\caption在浮动体外。

我检查过了,消息说的是错的。将 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)
```

align 应该是一个包含每列对齐方式的列表,可以是 left, right 或 center 中的任意一种,不应该只有一种。 - mb21
@mb21 不可以,它必须是逻辑上的。它表示该数是否按照小数点对齐。 - Alex
在我看来,这似乎是 pandocstargazer 生成的 LaTeX 代码进行转义,如果 align=TRUE 的话。 - CL.
2个回答

3

在Linux系统上,将stargazer包装在invisible或者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
```

原因在于(来自帮助页面)

stargazer使用cat()输出表格的LaTeX/HTML代码或ASCII文本。为了允许进一步处理此输出,stargazer还将相同的输出作为字符向量返回(不可见)。

我们使用suppressMessagesinvisible确保只呈现第一个输出(由cat产生)。当rmarkdown尝试使用print而不是cat进行呈现时,字符向量输出变成垃圾。

enter image description here


不知何故,对我仍然无效。您能否将控制台中的LaTeX代码直接复制到文档中? - Alex
已在RStudio版本0.99.484(64位Linux)、stargazer 5.2和knitr 1.13上进行测试并工作。当您尝试我的代码时会发生什么?您在运行knit之前保存了.Rmd文件吗?对我来说,如果我不先保存,它就会失败。 - dww
我仍然得到了之前相同的错误。我正在使用Windows版本的R studio进行工作。不确定那是否可能是原因。我猜测这是一个Pandoc错误,因为当直接复制到LaTeX中时,代码可以正常工作。如果您在没有包装器的情况下运行stargazer会得到什么错误? - Alex
我曾在Windows系统上尝试过这个,可以确认我也遇到了和你一样的问题。我用了pdflatex和xetex引擎都试过了,但问题依旧存在。看起来很可能是pandoc的一个bug。你能换成Linux系统吗?如果可以的话,我的解决方案可以满足你的需求,如果没有更好的Windows解决方案被发布的话。 - dww
感谢确认错误。然而,我不会更改操作系统,因为问题并不严重,而且我也不依赖于 stargazer。我还找到了一种使用正则表达式的解决方法。等我有时间时,我会发布我所做的内容,以供那些对如何修改 stargazer 输出超出提供的函数参数感兴趣的人参考。 - Alex

0

我曾经遇到了同样的问题。我尝试安装了最新版本的 pandoc,这解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接