yihui rmarkdown opts_chunk name false chunk cache asp r knitr

rmarkdown - ¿Cómo establecer cache=FALSE para un documento de reducción de valor de Knitr y anular la configuración del fragmento de código?



knitr:: opts_chunk (3)

Entiendo que puedo usar la opción cache=TRUE para almacenar en caché una porción de código R usando R Markdown con knitr . Por ejemplo, podría verse algo como esto:

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

Y me doy cuenta de que si quisiera deshabilitar el caché para ese análisis, podría cambiar la opción a cache=FALSE en el fragmento de código. Sin embargo, si tengo muchos fragmentos de código R con almacenamiento en caché habilitado, esto requeriría una operación de búsqueda y reemplazo cuidadosa.

Pregunta

  • ¿Hay una manera de configurar temporalmente cache=FALSE para un documento completo de Markdown R?

Comentarios

He visto este ejemplo donde está la primera línea. Así que imagino que esta es una forma de establecer la configuración global, pero creo que la configuración local anula la configuración global.

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


Eliminar opción de caché

knitr crea un directorio para almacenar los objetos en caché. Por defecto se llama cache . Para garantizar que todos los análisis se ejecuten independientemente de la configuración de la cache fragmentos de código, simplemente elimine el contenido del directorio de la memoria caché .

Así, en Rstudio en Linux.

  1. Vaya al menú Tools - Shell para abrir una consola en el directorio de trabajo que contiene el archivo de rebajas.
  2. Ingrese el comando rm cache/*

Un flujo de trabajo básico.

Este es mi flujo de trabajo básico en este momento.

  • Si el tejido es rápido (por ejemplo, menos de 10 segundos), no lo guarde.
  • Si el proceso de tejer `r opts_chunk$set(cache=TRUE)` (por ejemplo, más de 10 segundos), agregue `r opts_chunk$set(cache=TRUE)` al archivo Markdown de R.
  • Si el almacenamiento en caché está causando problemas y el tejido es relativamente rápido (por ejemplo, en unos pocos minutos), elimine todo el caché.
  • Si el almacenamiento en caché está causando problemas y el tejido lleva mucho tiempo (por ejemplo, varios minutos u horas), nombre los fragmentos de código R y use la opción dependson en knitr . La denominación también permite la eliminación selectiva de los fragmentos de código R nombrados en el directorio de caché.

Demasiado tarde una vez que haya creado el documento, pero para futuros documentos puede considerar el hecho de que los parámetros son evaluados por knitr . Esto significa que puedes tener cosas como:

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

Luego en la parte superior del documento tengo algo como:

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

Lo que luego le permite activar rápidamente un almacenamiento en caché para una gran cantidad de trozos a la vez.


Parece que el valor predeterminado está establecido en FALSO y las opciones de fragmentos locales anulan las opciones globales, pero una cosa que podría hacer es establecer las opciones globales en caché de forma predeterminada agregando esto a la parte superior de su documento

`r opts_chunk$set(cache=TRUE)`

Luego, para las secciones que no desea que se almacenen en la memoria caché, establecerá explícitamente esas secciones en cache = FALSE.

Luego, si desea configurar todo el documento para que no almacene en caché nada, puede cambiar la opción global a FALSE y volver a ejecutarla.

El problema es que si alguna de las opciones de chunk se configura en cache = TRUE, estas anularán la configuración global y no se volverán a ejecutar si establece la opción global en FALSE. Así que creo que la única forma de lograr lo que desea es cambiar el valor predeterminado a cache = TRUE, establecer explícitamente los fragmentos que no desea que tengan caché = FALSE, y luego puede cambiar la opción global a FALSE para hacer lo quieres cuando llegue el momento.