1.4 Dos enfoques de representación
Fusionar todos los capítulos en un archivo Rmd y compilarlo es una manera de hacer el libro en bookdown. Actualmente, existe otra forma: es posible compilar cada capítulo en una sesión de R separada, y bookdown combinará los Markdown de todos los capítulos para hacer el libro. A estos dos enfoques se les llama “Merge and knit” (MK) y “knit and Merge” (KM), respectivamente. Las diferencias entre ellos parecen sutiles, pero pueden ser bastante importantes dependiendo de sus casos de uso.
- La diferencia más significativa es que el MK corre todos los trozos de código de todos los capítulos en la misma sesión de R, mientras que K-M utiliza sesiones de R separadas para los distintos capítulos. Para M-K, el estado de la sesión de R de los capítulos anteriores se lleva a capítulos posteriores (por ejemplo, los objetos creados en los capítulos anteriores están disponibles para los capítulos siguientes, a menos que se les elimine deliberadamente); para K-M, todos los capítulos están aislados unos de otros2. Si desea que cada capítulo se compile desde un estado limpio, utilice el enfoque K-M. Puede ser muy complicado y difícil restaurar una sesión de R corriendo a un estado completamente limpio si se utiliza el enfoque de M-K. Por ejemplo, incluso si desea desvincular/descargar paquetes previamente cargados en un capítulo previo, R no va a limpiar los métodos S3 registrados por los paquetes.
- Debido a que knitr no permite etiquetas de chunk duplicadas en un documento de origen, debe asegurarse que no haya etiquetas duplicadas en sus capítulos del libro cuando se utilice el enfoque M-K, de lo contrario knitr señalará un error cuando compile el archivo Rmd fusionado. Tenga en cuenta que esto significa que no debe haber etiquetas duplicadas a lo largo de todo el libro. El enfoque K-M requiere no tener etiquetas duplicadas dentro de cualquier archivo sencillo Rmd.
- El método K-M no permite que los archivos Rmd estén en subdirectorios, mientras M-K sí.
El método por defecto en bookdown es M-K. Para cambiar a K-M, use o bien el argumento new_session = TRUE
al llamar render_book()
, o establezca new_session: yes
en el archivo de configuración _bookdown.yml
.
Se puede configurar book_filename
en _bookdown.yml
para el enfoque K-M, pero debe ser un nombre de archivo Markdown, por ejemplo, _main.md
, aunque la extensión del archivo no importa realmente, e incluso se puede dejar de lado la extensión, por ejemplo, establezca book_filename: _main
. Todas las demás configuraciones funcionan tanto para M-K como para K-M.
Obviamente, nadie puede dejar de escribir algunos archivos en un capítulo, y leerlos en otro capítulo. Es difícil aislar este tipo de efectos colaterales↩