Anexo F Quarto
ANEXO OBSOLETO - CONSULTE LA REFERENCIA ACTUALIZADA
La extension y riqueza de este tema exige su constante expansión, lo que resulta poco práctico a través de un anexo. Esto ha llevado a iniciar un nuevo proyecto dedicado enteramente a Quarto, el cual invitamos a visitar https://gcorrea.quarto.pub/quarto/.
Este anexo no tendrá ninguna actualización adicional. Únicamente se mantiene por si alguien desea usarlo como guía inicial para hacer la transición desde R Markdown. En cualquier otro caso deberá visitarse el libro Quarto, que, además de ser más completo y estar en constante actualización, está escrito en Quarto (el presente texto se escribió usando R Markdown), lo que permite ilustrar de mejor manera sus funcionalidades.
Quarto es un entorno de trabajo que facilita estructurar un documento que reúne las salidas, tanto gráficas como de texto, junto con el código que las genera y los comentarios e interpretaciones redactados por el usuario. Este entorno se basa en el lenguaje Markdown y puede usarse desde RStudio. Quarto es presentado por sus desarrolladores como la siguiente generación de R Markdown (Anexo E).
R MARKDOWN
Para facilitarles a los usuarios de R Markdown el proceso de migración hacia Quarto (¡recomendado!), este anexo incluye una serie de cajas de borde amarillo con el encabezado R MARKDOWN (como la presente), en las que se resaltan las principales diferencias entre estas dos herramientas. No obstante, quienes estén iniciándose en Quarto sin haber trabajado previamente con R Markdown deberán omitir el contenido de estas cajas para evitar confusiones y tener una lectura más fluida.
Habrá, sin embargo, cajas con bordes de otros colores que sí son relevantes para todos los usuarios.
El proceso involucra dos archivos: un archivo fuente y un documento de salida para la lectura. Los formatos más populares para documentos de salida son html, pdf y Word. Por su parte, el documento fuente de Quarto es un archivo de texto plano con extensión qmd, lo que lo hace identificable y procesable por RStudio.
F.1 Documento Quarto
La escritura de un reporte, artículo, libro, etc., comienza con un documento fuente de Quarto (.qmd). Este documento contiene toda la información para generar el documento de salida37.
F.1.1 Componentes del Documento Quarto
Los documentos de Quarto pueden estar conformados por tres tipos de contenidos:
- Encabezado en formato YAML
- Fragmentos de código
- Texto
F.1.1.1 Encabezado YAML
El encabezado en formato YAML (YAML Ain’t Markup Language) aparece al principio del documento de Quarto. Aunque es optativo, bajo ciertas circunstancias se genera automáticamente durante el proceso de renderizado que genera el archivo de salida (cf. sección F.2.1). Tanto el inicio como la finalización del encabezado YAML están definidos por tres guiones aislados en una línea. La información contenida dentro de esas dos líneas constituye el encabezado YAML. Allí suelen incluirse metadatos (tales como título, autor y fecha) y opciones generales que determinan la edición y las salidas (tales como el modo de edición predeterminado, el formato de salida y el tamaño de las imágenes). Cada uno de tales elementos ocupa una línea; para su definición se usa la sintaxis clave: valor
.
---
title: "RESPUESTA FISIOLÓGICA"
author: "José Antonio Pérez"
date: 2023-09-20
format: html
---
En el anterior encabezado YAML, la primera palabra de cada línea es una clave, mientras que la información que aparece a continuación de los dos puntos es su valor. Así, por ejemplo, title
es una clave, cuyo valor para el presente ejemplo es "RESPUESTA FISIOLÓGICA"
.
Para definir el formato de salida, en lugar del valor html
, pueden usarse los valores pdf
o docx
para generar documentos en pdf o Word, respectivamente.
La salida por defecto es en formato html, por lo que no haría falta especificarla si este fuera el formato deseado.
R MARKDOWN
La definición del formato de salida en el encabezado YAML mediante la clave format
es equivalente a la clave output
en el encabezado de R Markdown:
output: html_document
output: pdf_document
output: word_document
F.1.1.2 Fragmentos de código
El documento Quarto puede incluir tantos fragmentos de código como sean necesarios. Cada fragmento de código debe iniciarse con tres comillas invertidas seguidas de la letra r
dentro de llaves38. El fragmento finaliza con tres comillas invertidas aisladas en una línea. Todas las instrucciones incorporadas entre la línea de inicio y la de finalización constituyen un bloque de código o fragmento de código (code chunk). Los fragmentos de código tienen las mismas características que el código de los scripts clásicos de R.
Este fragmento de código, además de crear el vector X
, que podría usarse posteriormente en algún otro fragmento, genera un resultado:
[1] 2.322857
Para facilitar la creación de un nuevo fragmento de código, puede usarse la combinación de teclas Ctrl + Alt + i (o el ícono Insert a new code chunk ), con lo cual se incluye un fragmento de código vacío en el documento.
F.1.1.2.1 Opciones de los fragmentos de código
Los fragmentos de código pueden incluir opciones, de manera análoga a los argumentos de las funciones, pero, a diferencia de los argumentos de las funciones (que aplican únicamente a una función particular en una invocación específica) las opciones de los fragmentos de código aplican a todo el fragmento. Se trata de opciones generales, como el nombre del fragmento, si se ejecuta o no y si su contenido se muestra en el documento final (cf. sección F.2.2). A diferencia de los argumentos de las funciones —algunos de los cuales son obligatorios— todas las opciones de los fragmentos de código son optativas.
Cuando un fragmento de código incluye opciones, estas se indican con los símbolos #|
y manejan la misma sintaxis de las opciones del encabezado YAML, es decir, clave: valor
.
```{r}
#| label: Carga de paquetes
#| include: false
library(MASS)
library(car)
library(agricolae)
```
Reglas para definir las opciones de los fragmentos de código
Al escribir las opciones de los fragmentos de código deben atenderse una serie de reglas:
Las opciones deben aparecer en la primera línea del fragmento y posteriores, sin que medie ningún código ejecutable, comentario ni espacio entre ellas. Cada opción ocupa una línea.
La etiqueta indicadora de las opciones de fragmento de código
#|
debe iniciar en la primera columna, sin que la anteceda ningún espacio.Después de la etiqueta
#|
es necesario dejar exactamente un espacio.Los dos puntos van pegados de la clave, sin dejar ningún espacio de separación (v. gr.,
include:
).Debe dejarse al menos un espacio entre los dos puntos y el valor (v. gr.,
include: false
).Los posibles valores de las claves lógicas son
true
yfalse
.
R MARKDOWN
En R Markdown, las opciones de los fragmento de código se escriben dentro de las llaves que dan inicio al fragmento, usando la sintaxis de programación de R. Para facilitar el proceso de migración, Quarto también reconoce esta forma de especificar las opciones, no siendo necesario realizar ninguna adecuación a tales opciones para pasar tales fragmentos de código de un documento de R Markdown a uno de Quarto.
Una de las opciones de los fragmentos de código es un nombre o etiqueta de identificación (label
), el cual puede constar de una o más palabras, sin que sea necesario entrecomillarlas. No obstante, en caso de optar por la inclusión de etiquetas, estas deben ser únicas.
Dos o más fragmentos de código no pueden tener el mismo nombre.
Cuando no se asignan etiquetas a los fragmentos de código, estos reciben internamente un identificador genérico: chunk 5, chunk 6, chunk 7… Las etiquetas o nombres de los fragmentos pueden facilitar la navegación en documentos que contengan muchos fragmentos de código.
Para acceder al panel de navegación, se hace clic en el ícono que aparece la parte inferior izquierda de la ventana que contiene el documento Quarto.
Si bien es cierto que la asignación de etiquetas a los diferentes fragmentos de código puede facilitar la navegación a través de estos, también es cierto que su inclusión —así como la verificación de unicidad— puede exigir más tiempo del que eventualmente pudiera ganarse posteriormente. En tal sentido, cada usuario habrá de valorar cuál de estas opciones (inclusión u omisión de etiquetas) le brinda mayores beneficios.
En adición debe tenerse presente que estos marcadores de navegación, que son equivalentes a los manejados en los scripts clásicos de R (cf. sección 2.13), si bien resultaban muy útiles en aquellos, no lo son tanto en los documentos de Quarto, en los que se cuenta con marcadores de navegación más prácticos a través de los títulos (cf. sección F.1.1.3.1).
Algunas opciones de los fragmentos de código pueden establecerse de manera global en el encabezado YAML, de manera que afecten a todos los fragmentos de código (cf. sección F.2.2).
Es posible incluir comentarios dentro de los fragmentos de código, mediante el uso del símbolo numeral (#
). Al igual que en los scripts clásicos, tales comentarios se usarían como guía dentro del correspondiente fragmento o para desactivar temporalmente alguna instrucción sin borrarla. No obstante, para realizar comentarios más elaborados sobre algún procedimiento o resultado particular, con la intención de que tales comentarios aparezcan luego en el documento de salida, se usa el componente texto (sección F.1.1.3).
F.1.1.3 Texto
El texto es el tercer tipo de contenido de los documentos Quarto. Cualquier contenido que no esté dentro de un fragmento de código ni forme parte del encabezado YAML se toma como texto y aparecerá como tal en el documento de salida.
Aquí se usa texto en sentido amplio, considerando todos aquellos elementos que usualmente están presentes en un documento proveniente de un editor de textos tipo Word: el texto propiamente dicho, tablas, imágenes, ecuaciones…
Quarto procesa el texto usando el lenguaje de marcado ligero Markdown. Tales herramientas están incluidas en el paquete rmarkdown
, el cual debe estar instalado.
Cuando se usa Quarto desde RStudio no es necesario instalar ni el paquete quarto
para R ni el software Quarto para uso independiente, puesto que RStudio ya incluye Quarto39.
Mediante códigos de marcas es posible asignar formatos particulares al texto, los cuales se verán reflejados en el archivo de salida.
F.1.1.3.1 Títulos
Existen 6 niveles de títulos40, que se indican anteponiendo el correspondiente número de símbolos numeral (#
) a la línea. El nivel 1 es el de mayor rango, mientras que el de nivel 6 es el de menor rango. La apariencia final de los títulos de cada nivel, en términos de color, tipo de letra, tamaño, negrilla, cursiva, etc., dependerá del tipo de documento de salida que se genere (Word, pdf, html).
# TÍTULOS DE NIVEL 1
## TÍTULOS DE NIVEL 2
### TÍTULOS DE NIVEL 3
#### TÍTULOS DE NIVEL 4
##### TÍTULOS DE NIVEL 5
###### TÍTULOS DE NIVEL 6
Además de lo meramente estético, los títulos de diferentes niveles facilitan la navegabilidad dentro del documento final. Un ejemplo de ello se observa en salidas html, como la del presente libro, en las que los marcadores de título se usan para generar un menú por capítulos (que aparece en la parte izquierda cuando se visualiza desde un computador) y un submenú por secciones dentro de cada capítulo (que aparece en la parte derecha cuando se visuliza desde un computador). De manera análoga, los títulos generan paneles de navegación en documentos pdf y de Word41.
Asimismo, estos marcadores facilitan la navegabilidad dentro del documento fuente de Quarto. Para acceder al panel de marcadores, se presiona el ícono Outline , que se ubica en la parte superior derecha del panel principal del documento fuente, o se presiona Ctrl + Shift + O.
Para que los títulos sean reconocidos, es necesario dejar al menos un espacio entre los símbolos numeral y el texto.
Nótese que el símbolo #
desemepeña un rol diferente dependiendo de si se encuentra ubicado dentro de un fragmento de código o si forma parte del texto. Dentro de los fragmentos de código se usa al principio de una línea para indicar que se trata de un comentario o de código que no se ejecuta (cf. sección 2.13) o se usa junto con una pleca #|
para introducir las opciones de los fragmentos de código (cf. sección F.1.1.2.1). Cuando aparece al inicio de una línea de texto actúa como marcador de título.
Por su parte, el texto que no lleve antepuesto ningún símbolo numeral constituye texto ordinario.
F.1.1.3.2 Formato de texto
Mediante etiquetas, puede indicarse que cualquier texto sea formateado en itálica, negrilla o una combinación de ambas. También puede formatearse un texto como tachado.
*itálica*
**negrilla**
***negrilla e itálica***
~~tachado~~
Igualmente, usando etiquetas, puede indicarse el formato de subíndice o superíndice.
~subíndice~
^superíndice^
Así, cuando se escribe el siguiente texto en el documento fuente de Quarto,
Y = c~1~X + c~2~X^2^ + c~3~X^3^
aparece así en el documento final:
Y = c1X + c2X2 + c3X3
También es posible incluir comentarios en el texto, es decir, fragmentos de texto que se mostrarán únicamente en el documento fuente de Quarto, pero que no aparecerán en el documento final (Word, pdf, html…). Los símbolos <!--
marcan el inicio de un comentario. Para cerrarlo, se usan los símbolos -->
.
<!-- Comentario que no aparecerá en el documento final -->
Los comentarios pueden útiles para incluir aclaraciones o recordatorios que deben tenerse presentes cuando se vuelva a revisar el documento fuente, pero que no tendrían sentido ni valor en el documento de salida.
También pueden resultar útiles para englobar grandes bloques (código y/o texto) que, de momento, no se desean enviar al documento de salida, pero que no se quieren borrar porque podrían usarse en posteriores renderizaciones.
F.1.1.3.3 \(\LaTeX\)
Como parte de lo que se ha denominado genéricamente texto (cualquier contenido que no forme parte de un encabezado YAML, de un fragmento de código o de alguna salida), Quarto también admite contenidos alimentados mediante código LaTeX, a través de los cuales es posible incluir ecuaciones, tablas y figuras.
Aunque la composición de textos en LaTeX es un tema vasto, no se requiere dominarla para escribir contenido básico. Quien no esté familiazado con este sistema de composición de textos puede aprender lo esencial en 30 minutos, tal y como reza el título de uno de los tutoriales de Overleaf: Learn LaTeX in 30 minutes.
Los contenidos admitidos y la calidad en la que estos se presentan dependen del formato del documento de salida, siendo los documentos pdf los que mejor presentan las salidas basadas en LaTeX.
Para generar archivos pdf es necesario tener instalado un procesador de LaTeX. Para la mayoría de usos basta con instalar TinyTeX, usando para ello el paquete tinytex
:
tinytex::install_tinytex()
Si esto fuera insuficiente, habría que instalar una distribución completa de LaTeX, tal como MiKTeX. Este último es un software externo; no un paquete para R.
Existen dos modos de inclusión de ecuaciones usando código LaTeX:
Dentro de la línea (inline equation)
En línea aparte (display equation)
Para escribir una ecuación dentro de una línea, basta con rodearla con símbolos dólar.
La varianza poblacional $\sigma^2$
se estima…
El texto final mostrará lo siguiente:
La varianza poblacional \(\sigma^2\) se estima…
Para escribir una ecuación en línea aparte (display equation) usando código LaTeX, se usa doble símbolo dólar al comienzo y al final.
El estimador mínimo cuadrático de la varianza es:
$$
S^2=\frac{\sum\limits_{i=1}^{n}{(X_i-\bar{X})^2}}{n-1}
$$
En el documento de salida aparecerá así:
\[ S^2=\frac{\sum\limits_{i=1}^{n}{(X_i-\bar{X})^2}}{n-1} \]
El código LaTeX es el indicado para presentar todo lo concerniente a ecuaciones. Las posibilidades de subíndice y superíndice que se ilustraron anteriormente usando marcación Markdown son bastante limitadas y no trascienden de esa tarea específica. Aun en tareas tan sencillas como ubicar una serie de subíndices y superíndices, LaTeX realiza una labor mucho más estética, adecuando el formato de toda la ecuación.
Para ilustrarlo, presentamos nuevamente la combinación lineal, usando código Markdown
Y = c~1~X + c~2~X^2^ + c~3~X^3^
En el documento de salida se obtiene lo siguiente:
Y = c1X + c2X2 + c3X3
Ahora presentamos la misma combinación lineal usando código LaTeX
$$
Y=c_1X+c_2X^2+c_3X^3
$$
En el documento de salida se obtiene lo siguiente:
\[ Y=c_1X+c_2X^2+c_3X^3 \]
¡La diferencia salta a la vista!
R MARKDOWN
En R Markdown también pueden escribirse las ecuaciones en línea usando el formato de apertura \(
y el formato de cierre \)
. En Quarto únicamente es admisible el símbolo $
como formato de apertura y de cierre.
Asimismo, en R Markdown pueden escribirse las ecuaciones en línea independiente usando el formato de apertura \[
y el formato de cierre \]
. En Quarto únicamente es admisible el símbolo $$
como formato de apertura y de cierre.
F.1.2 Creación de un nuevo documento Quarto
Existen varias formas de crear un nuevo documento de Quarto. Mediante el sistema de menús, se elige “File”, “New File”, “Quarto Document…”. Equivalentemente, puede usarse el ícono New File , seguido de la opción Quarto Document . En cualquier caso, estos pasos llevan a una caja de diálogo, en la que se deja marcada la opción Document (que viene por defecto), y puede personalizarse la información contenida en los campos título y autor, así como el tipo de documento de salida. Esta es la información que irá en el encabezado YAML.
Los nuevos documentos de Quarto contienen información que pretende servir de plantilla. Al comienzo incluyen un encabezado YAML, el cual puede editarse o eliminarse. Seguidamente traen una combinación de textos y fragmentos de código, que hacen las veces de un minitutorial para ilustrar diferentes posibilidades. Esta información deberá eliminarse cuando se empiece a trabajar en un nuevo documento; eventualmente podría dejarse el encabezado YAML.
F.1.3 Estructura del documento Quarto
Aunque los desarrolladores de Quarto lo promocionan como una herramienta avanzada de edición de textos que puede usarse en cualquier ámbito, sin que tenga que estar relacionado ni con R ni con análisis estadísticos (novelas, libros de poesía, recetarios de cocina…), y esto es cierto, también es cierto que su mayor potencial se expresa cuando se usa para realizar, organizar y presentar análisis estadísticos. Suponiendo que este es el interés del lector, se presenta la estructura típica de un documento elaborado para tal fin.
La estrategia para la realización, organización y presentación de los análisis estadísticos usando Quarto difiere de la que se aplica cuando se llevan a cabo mediante un script tradicional de R. Lo que suele hacerse cuando se trabaja por la vía tradicional es ejecutar un gran script, cuyo código genera todos los resultados y al final se escribe el reporte usando algún editor de texto. Cuando se trabaja en Quarto, la idea es ir escribiendo el reporte en simultánea con la realización de los análisis y con la generación de los resultados: todo en un mismo documento.
En consonancia con lo anterior, no sería muy práctico tomar un script tradicional de R y vaciarlo dentro de un gran fragmento de código de Quarto, para escribir el reporte al final del documento. Una estrategia mucho mejor, que da lugar a documentos mejor estructurados y, por tanto, más legibles, consiste en usar pequeños fragmentos de código y mucho texto intercalado, mediante el cual se anticipen y justifiquen los análisis que van a realizarse, y se discutan los resultados justo después de que estos se generen.
Se recomienda dividir el código total en fragmentos tales que cada uno genere una única salida, de manera que sea posible discutirla justo después de que aparezca.
En el documento fuente de Quarto, tras el encabezado opcional YAML que iría al comienzo del documento, pueden alternarse todos los fragmentos de código y texto que sean requeridos, sin que exista restricción alguna ni en número ni en orden.
Un documento de Quarto podría tener el siguiente aspecto:
---
title: Ensayo primer semestre
---
La información de este análisis comprende las variables fisiológicas registradas entre abril y junio en aguacate Hass.
<!-- La información parcial del segundo semestre, cuya cosecha no ha
terminado aún, aparece en la segunda hoja del archivo "etapas.xlsx" -->
Inicialmente se cargan los paquetes que se usarán en el análisis y se importa y adecúa la base de datos.
library(agricolae)
library(car)
data <- readxl::read_excel("etapas.xlsx")
data$etp <- factor(data$etp)
A continuación se analiza cada una de las respuestas con un modelo de análisis de varianza de una vía aleatorizado en DCA.
# Fotosíntesis
anova <- aov(foto ~ etp, data)
shapiro.test(resid(anova))
\(\, \, \,\)Shapiro-Wilk normality test
data: resid(anova) W = 0.98007, p-value = 0.001977
Puesto que los residuales del modelo exhiben desviaciones severas del supuesto de normalidad (p-value = 0.001977), se evalúan a continuación diferentes transformaciones.
En este documento Quarto, la primera sección es el encabezado YAML, el cual, para el presente caso, contiene únicamente el título. A continuación aparece texto, mediante el cual se indican algunas características de los datos. Se intercala un comentario que no aparecerá en el documento de salida, pero que puede ser útil a futuro cuando se esté revisando nuevamente el documento fuente de Quarto. Le sigue más texto descriptivo mediante el cual se indica lo que hace el fragmento de código que aparece a continuación. Seguidamente aparece un fragmento de código que realiza lo anunciado; este fragmento de código no genera ninguna salida. Le sigue una nueva sección de texto, que incluye una explicación de los análisis que se realizarán y un título para la primera variable, que a su vez sirve de marcador de navegación (cf. sección F.1.1.3.1). Aunque el análisis de la variable en cuestión consta de varios procedimientos, el siguiente fragmento de código genera únicamente una salida, cuyo resultado aparece justo después del fragmento y se comenta de inmediato usando una nueva sección de texto.
Este intercalamiento de código y texto es el que justifica el uso de código de manera fragmentada. Tal y como se ilustra en este ejemplo, el texto puede usarse para incluir títulos, que sirven como marcadores de navegación, o como texto ordinario, para anunciar algún análisis particular o para comentar los resultados obtenidos y quizá para justificar los análisis posteriores.
No hace falta ninguna instrucción particular para inciar una sección de texto: basta con escribir; todo lo que esté por fuera de algún fragmento de código (y del encabezado YAML) es texto42.
F.1.4 Ejecución de los fragmentos de código
Cada uno de los fragmentos de código puede ejecutarse individualmente. De hecho, esta es la práctica recomendada cuando se está analizando la información. Esto permite ir construyendo el reporte a medida que los resultados van generándose e ir adaptando los análisis en función de los resultados obtenidos.
Un fragmento de código puede ejecutarse en su totalidad o línea por línea. Al igual que en los scripts clásicos, la combinación de teclas Ctrl + Enter permite ejecutar una instrucción o el conjunto de instrucciones seleccionadas (cf. sección 2.12). Mediante la combinación de teclas Ctrl + Shift + Enter, se ejecuta todo el fragmento de código, acción que igualmente puede realizarse presionando el triángulo verde que se ubica en la parte superior derecha de cada fragmento de código (Run Current Chunk).
Durante la construcción del documento Quarto, lo usual es ir ejecutando los fragmentos de código a medida que van escribiéndose. Y aunque las instrucciones en algunos fragmentos de código puedan depender de objetos creados en anteriores fragmentos, esto no representa ningún problema, puesto que todos los objetos creados permanecen disponibles en el ambiente de trabajo durante la sesión.
Debe tenerse presente, sin embargo, que toda nueva sesión de Quarto inicia con un ambiente de trabajo vacío, en el que no se habrá creado ningún objeto. Por tanto, cuando, partiendo de una nueva sesión de trabajo, se estuviera revisando algún fragmento de código particular, podría ser que este dependiera de fragmentos anteriores, en los que, por ejemplo, se hubieran importado o cargado los datos, definido nuevas variables, ajustado modelos, etc.
Para garantizar la correcta ejecución de un fragmento particular, podrían ubicarse y ejecutarse aquellos fragmentos previos de los cuáles dependa el fragmento de interés. Otra posibilidad —que en la mayoría de los casos puede ser más expedita— consiste en ejecutar el fragmento de interés junto con todos los fragmentos previos. Para ello se usa el ícono conformado por un triángulo gris sobre una barra horizontal verde, el cual está ubicado en la parte superior derecha de cada fragmento: Run All Chunks Above.
Las salidas que se generen con la ejecución de un fragmento de código se muestran a continuación del correspondiente fragmento, bien sean salidas gráficas o de texto. Esto facilita la estructuración del informe final, mediante la incorporación de los comentarios que sean del caso, justo a continuación de las salidas.
F.1.5 Código en línea
También es posible combinar texto y código, mediante el denominado código en línea (inline code), el cual consiste en una expresión de código R inmersa dentro de un texto.
El código en línea inicia con una comilla invertida y la letra r (`r
) y finaliza con una comilla invertida (`
):
El código en línea resulta útil para concatenar texto fijo con algún resultado variable, al estilo de las salidas generadas por la función cat
(cf. capítulo 15).
Considérese la siguiente adaptación de una parte del documento presentada anteriormente, en la que se guarda el resultado de la prueba Shapiro-Wilk en el objeto sw
, para extraer posteriormente el valor p:
Puesto que no se satisface normalidad (p-value = `r sw[2]`
)43, se evalúan diferentes transformaciones.
F.1.6 Código no ejecutable
En ocasiones se desea insertar código no ejecutable dentro del texto, es decir, un fragmento que tenga el mismo formato del código, de manera que resalte dentro del texto normal, pero que no se ejecute. Para ello, basta con encerrar el fragmento entre comillas invertidas. Así, por ejemplo, en el documento fuente de Quarto se escribiría lo siguiente:
El supuesto de normalidad se evalúa así: `
shapiro.test(resid(anova))`
.
En el documento de salida se verá similar a lo siguiente:
El supuesto de normalidad se evalúa así: shapiro.test(resid(anova))
.
El formato particular que se use para resaltar este código no ejecutable dependerá del tipo de documento de salida.
Para insertar un bloque no ejecutable en línea(s) aparte, se inicia el bloque con una línea de tres comillas invertidas y se finaliza con otra línea de tres comillas invertidas. El bloque puede constar de una o más líneas.
```
anova <- aov(foto ~ etp, data)
sw <- shapiro.test(resid(anova))
```
Las dos líneas del bloque anterior se mostrarán tal cual en el documento de salida, en el formato propio del código, pero sin generar ninguna acción ni resultado.
Lo mismo puede lograrse, sin necesidad de las dos líneas con comillas invertidas, usando una indentación de 4 espacios para cada línea.
F.2 Documento de salida
Una vez depurado el documento fuente Quarto, se procede a generar el documento de salida, en cualquiera de los formatos html, pdf o Word.
F.2.1 Renderizado
El paso entre el documento fuente de Quarto y el documento de salida exige una serie de proceso internos que en conjunto se denominan renderizado.
Durante el renderizado, se interpreta la sintaxis Markdown y se ejecutan todos los fragmentos de código incluidos en el archivo fuente de Quarto.
A partir de un archivo compilado intermedio, se genera el archivo final en el formato de salida especificado.
RStudio unifica todo el proceso descrito anteriormente. Para ello basta con presionar la combinación de teclas Ctrl + Shift+ k, o el ícono Render , con lo cual se generará un documento acorde con la opción indicada en el parámetro format
del encabezado YAML (html por defecto).
Para evitar errores durante el proceso de renderizado, es necesario asegurar que estén disponibles todos los recursos que se invoquen, v. gr., bases de datos y funciones personalizadas.
Esta misma consideración debe tenerse presente cuando se comparta un documento Quarto con otro usuario, con la intención de que reproduzca y/o modifique los análisis: junto con el documento fuente de Quarto habrá que compartir los recursos que allí se invoquen.
Cuando el proyecto se ubica en una carpeta sujeta a procesos de sincronización en la nube, tales como los de Dropbox, el renderizado no funciona adecuadamente. Para solucionar este problema, bien puede usarse otra ruta que no esté sujeta a sincronización o simplemente puede pausarse la sincronización mientras se esté realizando el renderizado.
F.2.2 Opciones de los fragmentos de código que determinan las salidas
Las opciones lógicas echo
e include
aplicadas a un fragmento de código permiten controlar los elementos que se visualicen u oculten en el documento de salida. La opción echo
controla la visualización de los fragmentos de código, mientras que la opción include
controla la visualización tanto del código como de los resultados generados. Por defecto, ambas opciones vienen preestablecidas con valor true
, lo que significa que en el documento de salida se muestran tanto el código como los correspondientes resultados.
La visualización que se elija para el documento de salida dependerá de los objetivos y el estado del reporte. Si el objetivo del reporte es compartir el análisis con otros usuarios, mostrando no solo los resultados, sino también la manera en que se generaron, deberá incluirse el código (echo: true
). Esto posibilita que todos los usuarios revisen los procedimientos con detalle e indiquen las modificaciones que sean del caso. Tales modificaciones se aplicarían, desde luego, sobre el documento fuente de Quarto.
En una etapa final, en la que se hayan depurado todos los procedimientos, podrá eliminarse la visualización del código (echo: false
), manteniendo únicamente sus resultados y el texto.
Mediante la opción eval
puede indicarse que no se evalúe un fragmento de código (eval: false
), lo que resulta útil cuando se escriben tutoriales, en los que únicamente se desea mostrar el fragmento de código, sin que se ejecute ni se genere ninguna salida.
Es importante diferenciar el efecto que tienen las opciones include
y eval
:
Mediante la opción
include: false
se instruye para que las salidas no incluyan ni el código ni los resultados que podría generar; sin embargo, el código sí se ejecuta. Esto es útil para realizar procedimientos internos (tales como como cargar un paquete o establecer parámetros gráficos) de los que no haya que dar cuenta en el documento final.Por su parte,
eval: false
muestra el código, pero este no se ejectua.
El valor por defecto para las tres opciones presentadas es true
, lo que implica que todos los fragmentos de código se ejecutan y que tanto el fragmento de código como los resultados generados aparecen en el documento final. La siguiente tabla ilustra el efecto que tiene establecer el valor false
para estas opciones.
Opción explícita | Se ejecuta | Se muestra el código | Se muestran resultados |
---|---|---|---|
eval: false |
No | Sí | No |
echo: false |
Sí | No | Sí |
include: false |
Sí | No | No |
Así, por ejemplo, para evitar que el primer fragmento de código que se presentó al ejemplificar la estructura de un documento de Quarto (cf. sección F.1.3) apareciera en el documento de salida, realizando, sin embargo, su ejecución, se le agregaría la opción #| echo: false
:
```
#| echo: false
library(agricolae)
library(car)
data <- readxl::read_excel("etapas.xlsx")
data$etp <- factor(data$etp)
```
Mensajes y advertencias. Los desarrolladores de código a menudo quieren mantener informado al usuario de lo que sucede tras bambalinas al cargar algunos paquetes o ejecutar algunas funciones. Así, por ejemplo, es común que se informe cuando las funciones de algún paquete enmascaran funciones de los paquetes básicos (cf. capítulo 4). Frecuentemente también se advierte sobre aspectos que deben tenerse en cuenta para interpretar adecuadamente los resultados. Este tipo de información, aunque pueda ser útil mientras se ejecutan los procedimientos, suele evitarse en los documentos de salida. Para ello basta con especificar las siguientes opciones:
Para hacer que estas opciones apliquen a todos los fragmentos de código, se establecen como directrices globales, incluyéndolas como subopciones44 de la opción execute
en el encabezado YAML.
La especificación para que en el documento de salida únicamente aparezcan los resultados y el texto, sin código, mensajes ni advertencias, queda así:
---
execute:
echo: false
message: false
warning: false
---
La lista completa de opciones, puede consultarse en el sitio de Quarto.
F.2.3 Formatos de Salida
La manera en la que se visualizan los diferentes elementos (fragmentos de código, texto, resultados) en el documento de salida puede variar en función del tipo de documento (html, pdf o Word). No obstante, en general, el código aparece dentro de una caja, con fondo gris. Los resultados se muestran de la misma manera en la que aparecen en la consola de RStudio, es decir, que no están antecedidos por ningun símbolo artificial45 y no tienen ningún tipo de resaltado, modificándose únicamente la fuente.
R MARKDOWN
Quarto diferencia el código de las salidas de una manera más natural que R Markdown, acercándose más a la experiencia de trabajo con RStudio. Asimismo, el hecho de que el código y las salidas aparezcan en diferentes secciones facilita el copiado de código, sin arrastrar innecesariamente las salidas.
El texto aparece como tal, incluyendo las especificaciones de formato que se hubieran elegido para el mismo.
Cada uno de los principales formatos de salida tiene sus ventajas y especificidades:
F.2.3.1 Documentos html
El formato html es el más ventajoso para el lector final, por las posibilidades que le ofrece; muy particularmente, cuando se aplica a contenidos de gran extensión —como el de este libro— que estén divididos en capítulos y secciones:
- Pueden visualizarse en cualquier navegador de internet.
- Los paneles de navegación facilitan moverse fluidamente a través de los diferentes temas.
- El contenido se adapta al tamaño del dispositivo de lectura, resultando cómodo incluso desde un teléfono móvil. Dependiendo del espacio disponible, los paneles de navegación se muestran o se ocultan. Cuando la lectura se realiza desde un teléfono móvil, el contenido y los paneles de navegación se adaptan al giro de la pantalla.
- Todos los vínculos externos son funcionales, dirigiendo a los recursos citados: páginas, instaladores, libros en línea…
- Todos los vínculos internos también son funcionales, facilitando ir rápidamente a alguna otra sección o recurso (tablas, figuras o ecuaciones) dentro del mismo libro y regresar al sitio de origen.
- Puesto que no hay cortes de página, las figuras y tablas pueden incluirse justo después de citarlas.
- Igualmente, por no haber cortes de página, las tablas se muestra completas y los bloques de código se muestran de manera compacta.
- Al no haber páginas físicas, las denominadas ‘notas de pie de página’ ya no aparecen al ‘pie de la página’, sino que se despliegan al pasar el ratón por encima. También puede irse a la nota46, haciendo clic sobre el correspondiente identificador numérico y regresar al punto de origen, haciendo clic sobre el ícono .
- Cuando se trate de un libro que incluya código R (no es obligatorio que sea así), es fácil copiarlo y llevarlo a R para realizar la correspondiente verificación y/o adaptación.
- Pueden disponerse vínculos o botones para bajar material complementario: bases de datos, scripts, paquetes, figuras…
- Cuando el libro se encuentra en algún repositorio, v. gr. bookdown.org, es probable que su autor realice constantes actualizaciones, con lo cual los lectores tendrán la certeza de estar accediendo siempre a la versión más reciente.
F.2.3.2 Documentos pdf
Son los más adecuados cuando su destino final es un soporte físico. Este formato considera las restricciones que impone la impresión en páginas de un tamaño definido, dando lugar a resultados bastante estéticos. Internamente, el proceso de generación del documento pdf se da a partir de un documento intermedio LaTeX.
F.2.3.3 Documentos Word
Tienen la ventaja de su versatilidad para edición e incorporación en otros documentos. Es el formato ideal para compartir con otros usuarios, facilitándoles el proceso de incluir correcciones y comentarios, sin que tengan que entenderse con ninguna herramienta ‘esotérica’.
Información de referencia
Para conocer más sobre las posibilidades de Quarto, se invita a visitar la página de la aplicación https://quarto.org/. Allí se recomienda empezar por el inicio: Get Started.
Para usar Quarto desde RStudio no es necesario realizar la instalación indicada en el primer paso. Se procede directamente al segundo paso, haciendo clic en el ícono de RStudio, con lo cual el tutorial hará referencia al uso de Quarto a través de esta IDE.
Una vez cubiertos los diferentes apartados del tutorial, se recomienda pasar a la guía Guide, donde podrán encontrase mayores detalles sobre las diferentes funcionalidades de Quarto.
El modo visual contiene una serie de herramientas que agilizan el proceso de edición y ayudan a descubrir nuevas funcionalidades. El paso entre el modo visual y el modo fuente suele ser fluido. No obstante, en ocasiones, en particular en documentos que contienen cajas de llamado y tablas en código html estas se desconfiguran al pasar al modo visual. Antes de ensayar este modo, se recomienda respaldar la información.