Условное `echo` (или eval или include) в rmarkdown chunks

Я хотел бы создать документ Rmarkdown (pdf или html), в котором некоторые фрагменты "выполняются" условно. В конкретном случае я имею в виду, что мне может понадобиться более подробный и документированный вариант вывода для внутреннего обзора коллегами и более короткая версия для внешних потребителей. Возможно, я не хочу или не должен показывать шаги манипулирования данными клиенту, а просто ключевые графики и таблицы. Я также не хочу делать два отдельных документа или вручную указывать, что показывать или нет.

Есть ли способ установить переключатель в начале Rmd, который указывает, например, verbose = T, который будет запускать все куски или verbose = F, которые переключают echo = F (или include = F)?

Спасибо.

Ответ 1

Параметры knitr могут быть указаны как R-выражения. Per "выходную" документацию на веб-странице knitr:

Обратите внимание, что все параметры в knitr могут принимать значения из R-выражений, что приводит к признаку условной оценки, представленной в основном руководстве. Короче говоря, eval=dothis означает, что реальное значение eval берется из переменной с именем dothis в глобальной среде; манипулируя этой переменной, мы можем включить/выключить оценку партии кусков.

Другими словами, если вы пишете несколько фрагментов, например:

```{r label}
doNextChunk <- as.logical(rbinom(1,1,.5))
```

```{r conditional, eval = doNextChunk}
"hello world!"
```

Ответ 2

opts_chunk$set() - это то, что вам нужно. Любой "набор" будет по умолчанию для последующих фрагментов (если не будет перезаписан на основе фрагмента)

```{r setup}
library(knitr)
opts_chunk$set(eval = TRUE, include= TRUE)
````

Затем вы можете изменить, как вам удобно.