> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/latex/ru/drugie-temy/29-knitr.md).

# Knitr

Как отмечено в Wikipedia, [Knitr — это движок для динамического формирования отчётов с помощью R](https://en.wikipedia.org/wiki/Knitr), языка программирования, ориентированного на статистику. В этой статье объясняется, как добавить код R в ваш документ LaTeX, чтобы сгенерировать динамический вывод.

В стандартном дистрибутиве LaTeX у вас должен быть настроен R в вашей операционной системе, и для его компиляции нужно выполнять некоторые специальные команды. Overleaf может избавить вас от этих хлопот, **knitr** работает сразу из коробки.

## Введение

Документы, содержащие код R, должны быть сохранены с расширением `.Rtex` или `.Rnw`, иначе код не будет работать. Давайте посмотрим на пример:

```latex
\documentclass{article}
\begin{document}

Вы можете вводить команды R в ваш документ \LaTeX{}, которые будут обработаны, а их вывод будет включён в документ:

<<>>=
# Создаём последовательность чисел
X = 2:10

# Отображаем основные статистические показатели
summary(X)

@
\end{document}
```

![KnitrDemo1.png](/files/cbf83eb5f14e6ad70f376256175239bcecd0f0f2)

&#x20;[Откройте этот `knitr` пример на Overleaf](https://www.overleaf.com/project/new/template/20421?id=69881107\&templateName=Knitr+demo+1\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Как вы видите, текст между символами `<<>>=` и `@`  — это код R; этот код и его вывод печатаются в виде, похожем на листинг. Этот фрагмент кода может принимать некоторые дополнительные параметры для настройки динамического вывода. См. следующий раздел.

## Фрагменты кода

Блок кода, подобный представленному в предыдущем разделе, обычно называется *фрагментом*. Вы можете задать некоторые дополнительные параметры в фрагментах knitr. См. пример ниже:

```latex
\documentclass{article}
\begin{document}

Вы можете вводить команды R в ваш документ \LaTeX{}, которые будут обработаны, а их вывод будет включён в документ:

<<echo=FALSE, cache=TRUE>>=
# Создаём последовательность чисел
X = 2:10

# Отображаем основные статистические показатели
summary(X)

@
\end{document}
```

![KnitrDemo2.png](/files/59c24c030c0e7d78d4a7fca735d2a6e09821ba7d)

&#x20;[Откройте этот `knitr` пример на Overleaf](https://www.overleaf.com/project/new/template/20423?id=69885763\&templateName=Knitr+demo+2\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Есть три дополнительных параметра, передаваемых внутри `<<` и `>>`.

**echo=FALSE**

Это скрывает код и выводит только результат, сгенерированный R.

**cache=TRUE**

Если cache установлен в true, фрагмент не выполняется, а только объекты, им созданные. Это экономит время, если данные в этом фрагменте не изменились. Учтите, что параметр cache=TRUE в настоящее время не поддерживается в Overleaf, но должен работать локально.

См. [справочное руководство](#reference-guide) для получения дополнительных параметров.

## Встроенные команды

Можно получить доступ к объектам, созданным в фрагменте, и выводить их в строке.

```latex
\documentclass{article}
\begin{document}

Вы можете вводить команды R в ваш документ \LaTeX{}, которые будут обработаны, а их вывод будет включён в документ:

<<echo=FALSE, cache=TRUE>>=
# Создаём последовательность чисел
X = 2:10

# Отображаем основные статистические показатели
summary(X)

@

Итак, среднее значение данных равно $\Sexpr{mean(X)}$
\end{document}
```

![KnitrDemo3.png](/files/d3954fdd2157f78328d7b73036f4cab4aa50a152)

&#x20;[Откройте этот `knitr` пример на Overleaf](https://www.overleaf.com/project/new/template/20425?id=69886866\&templateName=Knitr+demo+3\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Команда `\Sexpr{mean(X)}` печатает вывод, возвращённый кодом R `mean(X)`. Внутри фигурных скобок можно передавать любую команду R.

## Графики

Графики также можно добавить в **knitr** документ. См. следующий пример

```latex
\documentclass{article}
\begin{document}

<<plot1, fig.pos="t", fig.height=4, fig.width=4, fig.cap="First plot">>=

xdata = read.csv(file="data.txt", head=TRUE,sep=" ")

hist(xdata$data, main="Гистограмма Overleaf", xlab="Данные")

@

Рисунок \ref{fig:plot1} — это простая гистограмма.

\end{document}
```

![KnitrDemo4.png](/files/ab431de8f91835ae6bae358e0ca6cedfdd34669d)

&#x20;[Откройте этот `knitr` пример на Overleaf](https://www.overleaf.com/project/new/template/20427?id=69890965\&templateName=Knitr+demo+3\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=)

Эта гистограмма использует данные, хранящиеся в «data.txt», сохранённом в текущем рабочем каталоге. В фрагмент передаётся несколько параметров, связанных с рисунком.

**plot1**

Это метка, используемая для ссылки на график. Префикс "fig:" обязателен. Как видно в примере, на рисунок ссылаются с помощью \ref{fig:plot1}.

**fig.pos="t"**

Параметр позиционирования. Это тот же параметр, что и в окружении figure.

**fig.height=4, fig.width=4**

Ширина и высота рисунка.

**fig.cap="First plot"**

Подпись к рисунку.

## Внешние скрипты R

Вы можете импортировать части внешнего скрипта R в **knitr** документ. Это очень полезно, поскольку довольно часто пишут и отлаживают скрипт во внешней программе перед тем, как включить его в документ.

Предположим, у нас есть следующий код R в файле с именем `mycode.R` который мы включаем в наш документ LaTeX:

```latex
## ---- myrcode1
# Создаём последовательность чисел
 X = 2:10

## ---- myrcode2
# Отображаем основные статистические показатели
summary(X)
```

Обратите внимание на строки

```latex
## ---- myrcode1
```

и

```latex
## ---- myrcode2
```

Они обозначают начало фрагмента кода и являются обязательными, если вы хотите использовать этот скрипт в нашем документе, как показано в следующем фрагменте кода:

```latex
Нижеследующий фрагмент не будет напечатан

<<echo=FALSE, cache=FALSE>>=
read_chunk("mycode.R")
@

Код должен появиться здесь

<<myrcode2>>=

@
```

![KnitrDemo5.png](/files/a5c22d35e2c35a76c74f745811bb0afcdd6a85eb)

Первый фрагмент не печатается, он используется только для импорта скрипта с помощью команды `read_chunk("mycode.R")`, поэтому параметр `echo=FALSE` установлен. Кроме того, скрипты не должны кэшироваться. После импорта скрипта вы можете вывести фрагмент, используя метку, заданную после `## ----`. В данном случае это `myrcode2`.

Мы поместили все фрагменты кода статьи в проект, который  [вы можете открыть на Overleaf](https://www.overleaf.com/project/new/template/20429?id=69894649\&templateName=Knitr+full+demo\&latexEngine=pdflatex\&texImage=texlive-full%3A2020.1\&mainFile=) .

## справочнике

**Некоторые параметры фрагмента**

* `results`. Изменяет поведение результатов, сгенерированных кодом R, возможные значения
  * `markup` Использует LaTeX для форматирования вывода.
  * `asis` Печатает необработанные результаты из R.
  * `hold` Откладывает вывод результатов и помещает их в конец фрагмента.
  * `hide` Скрывает результаты.
* `echo`. Указывает, включать ли исходный код R. Может принимать и другие параметры, `echo=2:3` печатает только вторую и третью строки; `echo=-2:-3` исключает только вторую и третью строки.
* `cache`. Указывает, кэшировать ли фрагмент кода. Возможные значения `TRUE` и `FALSE`
* `highlight`. Указывает, следует ли подсвечивать исходный код. Возможные значения `TRUE` и `FALSE`
* `background`. Цвет фона фрагмента, можно использовать форматы rgb и HTML, значение по умолчанию *"#F7F7F7"*.

## Дополнительное чтение

Для получения дополнительной информации см.

* [Подсветка кода с minted](/latex/ru/formatirovanie/12-code-highlighting-with-minted.md)
* [Использование цветов в LaTeX](/latex/ru/formatirovanie/13-using-colors-in-latex.md)
* [графики в LaTeX](/latex/ru/specializirovannye/08-pgfplots-package.md)
* [Вставка изображений](/latex/ru/drugie-temy/27-inserting-images.md)
* [Таблицы](/latex/ru/risunki-i-tablicy/01-tables.md)
* [Размещение изображений и таблиц](/latex/ru/risunki-i-tablicy/02-positioning-images-and-tables.md)
* [Пакет TikZ](/latex/ru/risunki-i-tablicy/05-tikz-package.md)
* [Математические выражения](/latex/ru/matematika/01-mathematical-expressions.md)
* [окружения **knitr** веб-страница](http://yihui.name/knitr/)
* [окружения **knitr** руководство по пакету](https://bitbucket.org/stat/knitr/downloads/knitr-manual.pdf)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/latex/ru/drugie-temy/29-knitr.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
