Подтвердить что ты не робот

Как установить кеш = FALSE для документа уценки knitr и переопределить настройки блока кода?

Я понимаю, что я могу использовать параметр cache=TRUE для кэширования фрагмента кода R, используя R Markdown с knitr. Например, он может выглядеть примерно так:

```{r longanalysis, cache=TRUE}
for (i in 1:5000) {
    lm((i+1)~i)
}
```

И я понимаю, что если бы я хотел отключить кеш для этого анализа, я мог бы изменить параметр cache=FALSE в блоке кода. Однако, если у меня есть много фрагментов кода R с включенным кешированием, это потребует тщательной операции поиска и замены.

Вопрос

  • Есть ли способ временно установить cache=FALSE для всего документа R Markdown?

Комментарии

Я видел этот пример, где находится первая строка. Поэтому я предполагаю, что это способ настройки глобальной настройки, но я думаю, что локальные настройки отменят глобальные настройки.

`r opts_chunk$set(fig.width=5, fig.height=5, fig.path='')`
4b9b3361

Ответ 1

Кажется, что по умолчанию установлено значение FALSE, а параметры локального chunk переопределяют глобальные параметры, но одна вещь, которую вы можете сделать, - установить глобальные параметры для кэширования по умолчанию, добавив это в начало документа

`r opts_chunk$set(cache=TRUE)`

Затем для секций, которые вы не хотите кэшировать, вы должны явно указать эти разделы в кеш = FALSE.

Затем, если вы хотите, чтобы весь документ не кэшировал что-либо, вы могли бы изменить глобальный параметр на FALSE и повторить его.

Проблема в том, что если какая-либо из опций chunk установлена ​​в cache = TRUE, тогда они переопределяют глобальные настройки и не будут повторно выполняться, если вы установите глобальную опцию FALSE. Поэтому я думаю, что единственный способ добиться того, что вы хотите, - изменить значение по умолчанию на cache = TRUE, явно указать куски, которые вы не хотите кэшировать, чтобы иметь кеш = FALSE, а затем вы можете переключить глобальный параметр в FALSE, чтобы сделать что вы хотите, когда произойдет время.

Ответ 2

Удалить опцию кеширования

knitr создает каталог для хранения кэшированных объектов. По умолчанию он называется cache. Чтобы гарантировать, что все анализы будут выполняться независимо от установки кода cache, просто удалите содержимое каталога кеша.

Таким образом, в Rstudio в Linux

  • Перейдите в меню Tools - Shell, чтобы открыть консоль в рабочем каталоге, содержащем файл уценки.
  • Введите команду rm cache/*

Основной рабочий процесс

Это мой основной рабочий процесс в настоящий момент

  • Если вязание происходит быстро (например, менее 10 секунд), не кешируйте.
  • Если вязание занимает некоторое время (например, более 10 секунд), добавьте `r opts_chunk$set(cache=TRUE)` в файл R Markdown.
  • Если кеширование вызывает проблемы, а вязание относительно быстро (например, в течение нескольких минут), удалите весь кеш.
  • Если кеширование вызывает проблемы, а вязание занимает много времени (например, несколько минут или часов), назовите фрагменты кода R и используйте параметр dependson в knitr., Именование также допускает выборочное удаление названных фрагментов кода R в каталоге кэша.

Ответ 3

Слишком поздно, как только вы уже создали документ, но для будущих документов вам может потребоваться использовать тот факт, что параметры оцениваются с помощью knitr. Это означает, что вы можете иметь такие вещи, как:

```{r data.loading.chunk1, cache = cachedata}
blah blah
```
blah blah

```{r model.fitting.chunk1, cache = cachemodels}
blah blah
```

Тогда в верхней части документа у меня есть что-то вроде:

```{r libraries.etc, echo=FALSE, results='hide', message=FALSE}
cachedata = TRUE
cachemodels = TRUE
```

Которая затем позволяет быстро включить кеширование для большого количества кусков за раз.