2016-08-08 33 views
4

Ich arbeite mit stargazer und ich möchte eine LaTeX Ausgabe für ein einfaches lm Objekt produzieren. Das Problem ist, dass ich align = TRUE nicht setzen kann, ohne einen Fehler zu bekommen.Rmarkdown von Stargazer: LaTeX Fehler, wenn Ausrichtung auf TRUE gesetzt ist

LaTeX Error: \caption outside float.

Ich überprüfte es und was die Nachricht sagt, ist falsch. Kopieren Sie die Stargazer Ausgabe direkt in ein Latex-Dokument funktioniert gut. Kopieren in ein Dokument erzeugt den gleichen Fehler (was keine Überraschung ist, aber ich wollte nur sicher sein). Nachdem ich ein wenig herumgespielt habe, habe ich herausgefunden, dass es in funktioniert, wenn die Signifikanzsterne (*) entfernt werden (oder genauer gesagt, die ^{***}). Allerdings produziert stargazer sie standardmäßig und sie sind auch ein wichtiger Teil der Ausgabe.

Gibt es eine Möglichkeit, damit es funktioniert?

--- 
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) 
``` 
+0

zu rendern, sollte nicht "align" eine Liste von [links, rechts oder Mitte] sein (https://github.com/jgm /pandoc-types/blob/master/Text/Pandoc/Definition.hs#L165) (für jede Spalte)? – mb21

+0

@ mb21 Nein. Es muss logisch sein. Es zeigt an, ob es nach der Dezimalmarke ausgerichtet ist oder nicht. – Alex

+0

Für mich sieht das so aus, als würde "pandoc" den LaTeX-Code umgehen, der von 'stargazer' generiert wird, wenn' align = TRUE'. –

Antwort

1

Auf Linux-Systemen Stargazer innerhalb entweder invisible oder suppressMessages Einwickeln arbeitet, den Müll zu unterdrücken, wird anders gemacht. Leider scheint diese Lösung nicht auf Windows-Computern zu funktionieren.

--- 
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 
``` 

enter image description here

Der Grund dafür ist, dass (aus der Hilfeseite)

stargazer uses cat() to output LaTeX/HTML code or ASCII text for the table. To allow for further processing of this output, stargazer also returns the same output invisibly as a character vector.

Wir suppressMessages oder invisible verwenden, um sicherzustellen, dass nur der erste Ausgang (cat hergestellt) gemacht wird. Die Zeichenvektorausgabe wird zu Garbage, wenn rmarkdown versucht, sie unter Verwendung von print anstelle von

+0

Irgendwie funktioniert es immer noch nicht für mich. Kannst du einfach den Latexcode von der Konsole in das Dokument kopieren? – Alex

+0

Mit welcher R Studio-Version arbeiten Sie? – Alex

+0

Getestet und funktioniert auf RStudio Version 0.99.484 (64-Bit-Linux), Stargazer 5.2, Knitr 1.13. Was passiert, wenn Sie meinen Code ausprobieren? Hast du die .Rmd vor dem Stricken gespeichert? Für mich versagt es, wenn ich nicht zuerst speichere. – dww

Verwandte Themen