Вывод Stargazer отображается под текстом - rmarkdown to pdf

Проблема

При использовании rmarkdown в RStudio мой вывод stargazer(glm()) располагается под текстом, который я бы хотел. Он размещается в другом месте, чем r chunk.

PDF-файл создан идеально, проблема заключается только в положении stargazer вывода.

Фон

Я пытаюсь создать PDF-файл с большим количеством текста и несколькими stargazer glm() выводами между несколькими абзацами. Когда я помещаю более одного stargazer() вывода в свой файл rmarkdown, а затем «Сшиваю» в PDF, результат stargazer() перемещается вниз под текстом.

Я бы хотел, чтобы stargazer output расположился там, где я поставил r chunks.

У меня нет такой проблемы при использовании аналогичной вставки вывода ggplot2().

Неудачные попытки

Я перепробовал столько комбинаций, сколько знаю, как позиционировать свои r chunks аргументы. (На всякий случай)

Я пробовал каждую комбинацию табуляции и пробелов до и после абзацев / заголовков / r-chunks / и т. Д. (Однажды у меня была проблема с выводом ggplot2)

Я сослался на следующие вопросы StackOverflow:

Воспроизводимый пример

Воспроизводимый пример моей рабочей проблемы:

---
title: "Untitled"
author: "Me"
output: pdf_document
---

```{r setup, echo = FALSE}
library(stargazer)

mtcars_glm <- glm(formula = vs ~ disp + am + cyl + mpg, family = "binomial", data = mtcars)

```

# Heading1

I have tried creating paragraphs like this.

    I have also tried creating paragraphs with 2 indents.

## Heading2

Lets try to create a couple of nice tables with stargazer.

```{r attempt1, results = 'asis', echo = FALSE}

stargazer(mtcars_glm, ci=FALSE, no.space = TRUE, report = c("vc*"), header = FALSE)

```

And then we will add some text down here, too.

```{r attempt2, results = 'asis', echo = FALSE}

stargazer(mtcars_glm, ci=FALSE, no.space = TRUE, report = c("vc*"), header = FALSE)

```

And some more text.

```{r attempt3, results = 'asis', echo = FALSE}

stargazer(mtcars_glm, ci=FALSE, no.space = TRUE, report = c("vc*"), header = FALSE)

```

Lets see what happens.

### Heading3

```{r plot_attempt}

boxplot(mtcars$mpg ~ mtcars$cyl)
```

# Second Section

## Second Header

Вот 3 страницы вывода:

Страница № 1  Страница 1

Страница № 2  Страница 2

Страница № 3  Страница 3

Вот моя информация о сеансе:

R version 3.4.4 (2018-03-15)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] stargazer_5.2.1

loaded via a namespace (and not attached):
 [1] compiler_3.4.4  backports_1.1.2 magrittr_1.5    rprojroot_1.3-2 htmltools_0.3.6 tools_3.4.4     yaml_2.1.19     Rcpp_0.12.16    stringi_1.1.7   rmarkdown_1.9  
[11] knitr_1.20      stringr_1.3.0   digest_0.6.15   evaluate_0.10.1

Спасибо

Если вы можете мне помочь, спасибо. Я мало что знаю о LaTeX или Pandoc, поэтому полагаю, что это какой-то пробел в знаниях. Не стесняйтесь указывать и мне в правильном направлении, если вы думаете, что нашли решение.

Я ценю это.


person Christian Million    schedule 09.05.2018    source источник


Ответы (2)


Если вы установите float = FALSE, у вас не будет никаких функций, которые поставляются с плавающей средой, таких как подписи (т. Е. Заголовок) или метки. Вместо этого рассмотрите возможность установки безусловного размещения таблицы с помощью пакета float. В качестве примера рассмотрим следующий документ (я использую \clearpage для начала тела на странице 2, чтобы мы могли видеть соседние страницы на снимке экрана):

---
title: "Untitled"
author: "Me"
header-includes:
   - \usepackage{lipsum}
output: pdf_document
---
\clearpage
\lipsum[1]
```{r setup, echo = FALSE, include = FALSE}
library(stargazer)
mtcars_glm <- glm(formula = vs ~ disp + am + cyl + mpg, family = "binomial", data = mtcars)
```

Table 1 here.
```{r tab1, results = 'asis', echo = FALSE}
stargazer(mtcars_glm, ci=FALSE, no.space = TRUE, report = c("vc*"), 
          header = FALSE, title = "Table 1")
```

\lipsum[2-3]
Table 2 here.
```{r tab2, results = 'asis', echo = FALSE}
stargazer(mtcars_glm, ci=FALSE, no.space = TRUE, report = c("vc*"), 
          header = FALSE, title = "Table 2")
```

\lipsum[4]

что дает  введите здесь описание изображения

где Таблица 2 перенесена на следующую страницу, а текст после Таблицы 2 перемещен вверх. Так себя ведет LaTeX; он не хочет оставлять слишком много белого пространства внизу страницы. Чтобы настоять на том, чтобы таблица 2 следовала за фрагментом текста, вы можете использовать спецификатор H (для которого требуется пакет float LaTeX). Вот тот же документ, но обратите внимание на аргумент table.placement в блоке tab2:

---
title: "Untitled"
author: "Me"
header-includes:
   - \usepackage{float}
   - \usepackage{lipsum}
output: pdf_document
---
\clearpage
\lipsum[1]
```{r setup, echo = FALSE, include = FALSE}
library(stargazer)
mtcars_glm <- glm(formula = vs ~ disp + am + cyl + mpg, family = "binomial", data = mtcars)
```

Table 1 here.
```{r tab1, results = 'asis', echo = FALSE}
stargazer(mtcars_glm, ci=FALSE, no.space = TRUE, report = c("vc*"), 
          header = FALSE, title = "Table 1")
```

\lipsum[2-3]
Table 2 here.
```{r tab2, results = 'asis', echo = FALSE}
stargazer(mtcars_glm, ci=FALSE, no.space = TRUE, report = c("vc*"), 
          header = FALSE, title = "Table 2", table.placement = "H")
```

\lipsum[4]

что дает  введите здесь описание изображения

Таблица размещается после текста («Таблица 2 здесь»), даже за счет того, что внизу страницы остается пустое пространство. Альтернативой является \FloatBarrier из пакета placeins; см. https://tex.stackexchange.com/questions/19766/how-to-control-the-position-of-floating-images.

В общем, вы должны оставить размещение плавающих (то есть таблиц и рисунков) в LaTeX. См. https://tex.stackexchange.com/questions/39017/how-to-influence-the-position-of-float-environments-like-figure-and-table-in-lat для подробного обсуждения.

person Weihuang Wong    schedule 09.05.2018
comment
Я видел, что вы разместили это, когда я набирал очень похожее решение, которое я нашел. (см. другой пост) Спасибо за вашу помощь и всю работу, которую вы вложили в свой ответ, и за предоставление дополнительных ресурсов. Это помогает мне лучше понять, где я ошибся, и как изменить курс в следующий раз. - person Christian Million; 09.05.2018
comment
Ах. Я пропустил table.placement. Я думал, что где-то в stargazer может быть встроенная опция без ручной настройки результирующего файла tex. Я впервые столкнулся с пакетом и не прочитал всю документацию, так как был на мобильном телефоне. +1 - person hpesoj626; 10.05.2018

Установите float = FALSE. Из руководства,

float: a logical value that indicates whether the resulting table will be a 
floating table (set off, for instance, by \begin{table} and \end{table}).

В LaTeX среда table - это плавающая среда.

E.g.

stargazer(mtcars_glm, ci=FALSE, no.space = TRUE, report = c("vc*"), float = FALSE)
person hpesoj626    schedule 09.05.2018
comment
Вот это да. Спасибо @ hpesoj626. Я никогда не подозревал, что решение лежит в самой функции. Я ценю вашу помощь. - person Christian Million; 09.05.2018