Как установить cache=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='')`

person Jeromy Anglim    schedule 17.05.2012    source источник


Ответы (3)


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

`r opts_chunk$set(cache=TRUE)`

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

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

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

person Dason    schedule 17.05.2012
comment
Спасибо за помощь. Тем не менее, я думаю, что только что решил свою проблему. Я застрял на идее, что это должно быть сеттингом. Но на самом деле все, что требуется, это удалить содержимое папки с кешем. - person Jeromy Anglim; 17.05.2012
comment
@JeromyAnglim Это тоже подойдет. Я по-прежнему предпочитаю кэшировать все по умолчанию, и в качестве дополнительного преимущества проблема, с которой вы столкнулись, может быть решена без необходимости переходить к папке и удалять папку кеша. - person Dason; 17.05.2012
comment
Спасибо. Я попробую оба способа. Я новичок в кэшировании. Я предполагаю, что есть компромисс. Как часто вы меняете фрагменты кода, которые влияют на уже запущенные фрагменты. Насколько медленный код. Как часто нужно вязать на хтмл. и т. д. - person Jeromy Anglim; 17.05.2012
comment
Верно, но даже если фрагмент кэшируется, если вы вносите в него изменения, его следует запустить повторно. Единственное, что я обычно не кеширую, — это загрузка пакетов, потому что если вы кешируете эти вызовы, все испортится. - person Dason; 17.05.2012
comment
Я думаю, что решение Дейсона - это то, что обычно следует делать. Вопрос сводится к глобальным и локальным параметрам фрагмента, и opts_chunk$set() является ответом. Удаление каталога кеша звучит жестоко, хотя тоже работает :) - person Yihui Xie; 18.05.2012

Удалить опцию кеша

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

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

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

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

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

  • Если вязание идет быстро (например, менее 10 секунд), не кэшируйте.
  • Если вязание занимает некоторое время (например, более 10 секунд), добавьте `r opts_chunk$set(cache=TRUE)` в файл R Markdown.
  • Если кеширование вызывает проблемы, а вязание выполняется относительно быстро (например, менее нескольких минут), удалите весь кеш.
  • Если кэширование вызывает проблемы, а вязание занимает много времени (например, несколько минут или часов), назовите фрагменты кода R и используйте параметр dependson в файле Knitr< /а>. Именование также позволяет выборочно удалять именованные фрагменты кода R в каталоге кеша.
person Jeromy Anglim    schedule 17.05.2012
comment
ToolsShell, похоже, открывает консоль в текущем рабочем каталоге интерактивной консоли r. Это может отличаться от расположения каталога, содержащего файл уценки, в котором хранится кеш. - person Sparhawk; 11.02.2013

Слишком поздно, если вы уже создали документ, но для будущих документов вы можете рассмотреть возможность использования того факта, что параметры оцениваются 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
```

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

person Corvus    schedule 12.03.2013