Как установить кеш = 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='')`
Ответы
Ответ 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
```
Которая затем позволяет быстро включить кеширование для большого количества кусков за раз.