bookdown / rmarkdown / knitr: Открыть документ с (графическим) результатом более позднего фрагмента кода?

Представьте себе упрощенный _1 _ / _ 2_ документ, который выглядит примерно так:

---
title: "Test Doc"
author: "Balin"
date: "May 25, 2018"
output: 
  bookdown::pdf_document2:
    toc: no
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

<!-- Placeholder - See question -->

This stands in for an extensive report where `code`, its documentation
and interpretation of its results are integrated:

1. We load some data:
   ```{r data-loading}
    my_data <- cars
   ```

2. We (rougly) explore that data and report on it:
   ```{r data-exploration}
   summary(my_data)
   ```

3. We transform the data:
   ```{r data-transform}
   my_data <- log2(my_data)
   ```

4. ... many, many more steps ...

5. We perform a (central) graphical analysis:
   ```{r data-plot}
   plot(my_data)
   ```

6. We state some interpretation ... etc.

В таком отчете я стремлюсь заменить бит <!-- Placeholder - See question --> на раздел «Краткое изложение» / «Кратковременный пик», который сосредоточен на графическом выводе фрагмента data-plot. Достижимо ли это в _6 _ / _ 7 _ / _ 8_ при сохранении code / повествовательной интеграции с учетом относительного позиционирования?


person balin    schedule 25.05.2018    source источник
comment
Голосование "против" без комментариев - считаю это невежливым.   -  person balin    schedule 25.05.2018
comment
На мой взгляд, это прекрасный вопрос, к тому же очень полезный. Однако, чтобы выжить в Stack Overflow, вам нужно научиться игнорировать некоторые безответственные отрицатели, которые действительно не знают, что делают. Ненавистники возненавидят, а противники проголосуют против.   -  person Yihui Xie    schedule 25.05.2018
comment
Большое спасибо за ваши успокаивающие слова.   -  person balin    schedule 25.05.2018


Ответы (1)


Да, вы можете использовать knitr::fig_chunk() для динамического извлечения пути к фигуре, созданной в определенном фрагменте кода, например,

---
title: "Test Doc"
author: "Balin"
date: "May 25, 2018"
output: 
  bookdown::pdf_document2:
    toc: no
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

# Executive Summary {-}

Here is an amazing discovery!

![](`r knitr::fig_chunk('data-plot', 'pdf')`)

# Detailed analysis

This stands in for an extensive report where `code`, its documentation
and interpretation of its results are integrated:

1. We load some data:
   ```{r data-loading}
    my_data <- cars
   ```

2. We (rougly) explore that data and report on it:
   ```{r data-exploration}
   summary(my_data)
   ```

3. We transform the data:
   ```{r data-transform}
   my_data <- log2(my_data)
   ```

4. ... many, many more steps ...

5. We perform a (central) graphical analysis:
   ```{r data-plot}
   plot(my_data)
   ```

6. We state some interpretation ... etc.

Вывод в PDF

Чтобы это работало для других типов выходных форматов, вам может потребоваться изменить расширение имени файла pdf. Один из способов сделать это:

![](`r knitr::fig_chunk('data-plot', if (knitr::is_latex_output()) 'pdf' else 'png')`)

Конечно, это предполагает, что вы используете устройство pdf для выходных форматов LaTeX / PDF и png для других форматов (которые являются настройками по умолчанию для графических устройств в R Markdown).

person Yihui Xie    schedule 25.05.2018
comment
Большое спасибо, @Yihui Xie! Еще одна замечательная деталь вашего набора инструментов! Правильно ли я предполагаю, что если я хочу иметь возможность компилировать как *.pdf (через LaTeX), так и *.docx, расширение файла должно измениться на png в последнем случае? Есть ли переменная, которую легко запрашивать, чтобы проверить, что мы компилируем? - person balin; 25.05.2018
comment
... и кое-что еще: имеет значение, находится ли блок, создающий сюжет, в дочернем документе? - person balin; 25.05.2018
comment
Не имеет значения, вызывается он в дочернем документе или нет. Для Word да, вам нужно изменить расширение имени файла на png. Я обновил свой ответ. - person Yihui Xie; 26.05.2018
comment
Выдающийся! Большое тебе спасибо! - person balin; 26.05.2018
comment
Есть ли способ встроить ![](r knitr :: fig_chunk ('data-plot', if (knitr :: is_latex_output ()) 'pdf' else 'png') _ 2_ во встроенный код? Хочу сделать что-то вроде r if(thisistrue){cat("the link")}, но ни кот, ни паста не гнутся моей воле ... - person balin; 02.07.2018