(Web del curso aquí)
Trabajamos con Qprojects
Documento fuente escrito en Qmd genera diferentes outputs
Quarto is a multi-language, next generation version of R Markdown, with many new features and capabilities.
Puedes ver este video de 100 segundos
Muy parecido a Rmarkdown, pero … no requiere R. Soporta lenguajes como Phyton, Julia y Observable.
Quarto utiliza Knitr para ejecutar el código R; así que es capaz de procesar también los ficheros .Rmd sin modificarlos
Extensión: Ventajas de Quarto sobre RMD
Proyecto en desarrollo activo … mientras que Rmarkdown it’s not going away pero …
Quarto unifica funcionalidades de varios paquetes del entorno Rmd como xaringan, bookdown, blogdown , …
Por ejemplo: Cross references, Call-outs, Advanced Layout (tb para imágenes), Extensiones, Interactividad, YAML inteligence, Quarto Pub, Divs, Spans
Para ver si estas ventajas merecen la pena para ti puedes leer a Occasional Divergences, Nick Tierney, Alison Hill, Danielle Navarro, Jumping Rivers o esta pregunta de Stack Overflow.
Extensión: ¿Qué es Rmarkdown? ¿Para qué sirve?
El predecesor de Quarto
Un “entorno” para hacer informes/publicaciones/transparencias REPRODUCIBLES con R.
Is an authoring framework for data science, combining your code, its results, and your prose. R Markdown documents are fully reproducible and support dozens of output formats, like PDFs, Word files, slideshows, and more.
Tarea 3.0: Vamos a crear un nuevo Qproject
Cierra RStudio
Crea un nuevo Qproject llamado “my_qproject”
Borra el archivo my_qproject.qmd
Crea un archivo .qmd
Procésalo y llámalo prueba_01.qmd
.qmd).qmd tienen 3-4 partesEncabezamiento (yaml header)
Trozos de código R (R chunks)
Texto (escrito en Markdown) …
… y todo lo demás: imágenes, links, ecuaciones, etc …
Se (suele) poner al principio del documento, entre estas marcas: ---
En el yaml son MUY importantes los espacios y la indentación
Tarea 3.1: Vamos a jugar con el yaml
En documentos .qmd podemos incorporar código
Código que puede ser ejecutado
Así se podrá mostrar en el documento final tanto el código como los resultados (de la evaluación del código)
Esto es lo que permite que los documentos sean reproducibles
La documentación oficial está aquí
.qmd es código R, debe ir dentro de estas marcas:knitr procesen el chunk, se interpretará como código R y ejecutará las instrucciones, de forma que, en el documento final, se mostrará el output generado por el chunk.| Opción | (valor por defecto) | ¿Que hace? |
|---|---|---|
echo |
true | Incluye el código en el documento final |
eval |
true | Evalúa el código |
warning |
true | Incluye los avisos en el documento final |
message |
true | Incluye los mensajes |
Extensión: hay más opciones para los chunks
| Opción | (valor por defecto) | ¿Que hace? |
|---|---|---|
output |
true | Incluye el resultado de la evaluación del código |
error |
false | Si pones true, se mostrarán los errores (!!!!) |
include |
true | |
label |
Si quieres poner label al chunk |
Extensión: más detalles sobre las opciones de los chunks
include: si en un chunk pones #| include: false , el código de ese chunk se ejecutará pero no se mostrará nada, ni el código, ni el resultado, ni mensajes, ni errores. Esta opción es útil, por ejemplo, para cargar los paquetes de R.label: si en un chunk pones #| label: setup : ese chunk se llamará setup, y este chunk se ejecutará siempre que ejecutes otro chunk del mismo documento. Esta opción también también usarse para cargar los paquetes necesarios para un análisis, de forma que estos siempre estén disponibles si se ejecuta otro chunk. Esto puede ser una buena práctica.Tarea 3.2: Vamos a incorporar un chunk a nuestro .qmd
Utiliza el archivo prueba_01.qmd para insertar un chunk de código R con las siguientes instrucciones:
Si no tuvieses el paquete tidyverse instalado, puedes usar este otro chunk:
Ayudita con las marcas de los chunks
Tarea 3.2b: Vamos a jugar con la opciones de los chunks
Incorpora al chunk las siguientes opciones: echo y eval
¿Cuales son las opciones por defecto para echo y eval?
message y labelExtensión: dos detalles más sobre opciones de los chunks
#| output: asis : permite generar raw-markdown. Un ejemplo aquíecho: además de los típicos true y false, ahora incorpora nuevos valores, como #| echo: fenced , que facilita mostrar las marcas de los chunks en el documento final, o la opción #| echo: […] que permite mostrar sólo algunas de las lineas de código del chunk. Documentación aquí y aquí.execute:Tarea 3.3: opciones de los chunks en el YAML
Utiliza el archivo prueba_01.qmd para insertar las opciones de los chunks en el YAML del documento
Por ejemplo, indica en el YAML que echo: true pero eval: false
Extensión: uso de la opción include
include: en el YAML?knitrknitr para ejecutar los chunks, entonces podemos usar todas las opciones nativas de knitr, como: collapse, fig.width, comment, etc … Más información aquí. Un ejemplo:knitr tendrás que ir a la página web de knitr, a la cheat sheet sobre Rmarkdown, o a la Reference GuideExtensión: Mi chunk de setup en RMD
```{r chunk-setup, include = FALSE}
knitr::opts_chunk$set(echo = TRUE, eval = TRUE, message = FALSE, warning = FALSE,
#results = "hold",
cache = FALSE, cache.path = "/caches/", comment = "#>",
#fig.width = 7, #fig.height= 7,
#out.width = 7, out.height = 7,
collapse = TRUE, fig.show = "hold",
fig.asp = 7/9, out.width = "60%", fig.align = "center")
options(scipen = 999) #- para quitar la notación científica
```Ahora, en Quarto, hay más opciones para los chunks. Documentación oficial aquí. Por ejemplo:
Hacer folding code con #| code-fold: true
#| code-summary: "Para ver el código, pincha"#| code-overflow: wrap (o scroll)#| code-line-numbers: trueTodas estas opciones también pueden ir en el YAML.
```r
library(tidyverse)
library(palmerpenguins)
penguins |> # <1>
mutate( # <2>
bill_ratio = bill_depth_mm / bill_length_mm, # <2>
bill_area = bill_depth_mm * bill_length_mm # <2>
) # <2>
```
1. Take `penguins`, and then,
2. add new columns for the bill ratio and bill area.
(*) (faltan las {} en el chunk)
Si quiero describir un conjunto de datos puedo hacerlo escribiendo: “El data.frame iris tiene 150 filas y 5 variables”
Pero es mejor hacerlo con inline code. Para ello tienes que poner el código R dentro de estas marcas: `r `
Habría que escribirlo así:
`r nrow(iris)` filas y `r ncol(iris)` variables.Tarea 3.5: Código inline
Utiliza el archivo prueba_01.qmd para incorporar un párrafo de texto que contenga código inline.
Por ejemplo, puedes incorporar este párrafo:
Este archivo que estoy escribiendo lo hice el 20 de mayo de 2024.
pero lo que queremos es que la fecha se modifique cada vez que se procese el documento prueba_01.qmd
.qmd.knitr⁉️ Para ello hay que usar estas marcas:.qmd bloques de código no ejecutables: se usan las mismas marcas ``` , pero sin las llaves. Documentación oficial aquí(**)default languageExtensión: diferencias entre Quarto y Rmd
No hace falta chunk inicial: con Quarto se pueden poner las opciones de los chunks en el YAML
En ficheros .qmd, las opciones de los chunks se pueden especificar globalmente en el YAML y a nivel individual en cada uno de los chunks.
En los chunks individuales ahora se se utiliza la sintaxis YAML (key: value) en lineas dentro del chunk que empiezan con #|. Por ejemplo:
.qmd vs. .Rmd):Extensión: convertir de Rmarkdown a Quarto
Esta perfectamente bien explicado por Thomas Mock aquí y aquí pero, por si alguna vez desaparecen sus slides, lo replicaré aquí.
La mayoría de las veces, Quarto puede procesar los ficheros .Rmd, pero si quieres convertirlos a .qmd
Cambia la extensión del fichero de .Rmd a .qmd
Cambia la sintaxis del yaml:
output: html_document ahora es format: htmlPuedes convertir los chunks de código a la sintáxis actual con:
knitr::convert_chunk_header("doc.qmd", output = identity).html (y gracias a Pandoc a muchos otros formatos).htmlMarkdown is a way to write for the web. It’s written in what nerds like to call “plaintext”. Plaintext is just the regular alphabet, with a few familiar symbols. Unlike cumbersome word processing applications, text written in Markdown can be easily shared between computers, mobile phones, and people. It’s quickly becoming the writing standard for academics, scientists, writers, and many more. Websites like GitHub and reddit use Markdown to style their comments.
.qmd, “todo” lo que no es el yaml o un chunk, es texto.markdown| Si escribes esto: | Se verá esto: |
|---|---|
|
texto normal |
|
texto en negrita |
|
texto en cursiva |
|
un superíndice2 |
|
un subíndice2 |
|
palabras |
|
verbatim code |
|
|
Tarea 3.7: texto en markdown
Para practicar a escribir con Markdown podemos:
Hacerlo en RStudio, por ejemplo podemos utilizar el archivo prueba_01.qmd para incorporar un párrafo que contenga los elementos que hemos visto en la tabla anterior
Alternativamente, podemos usar editores online como este o este
| Si escribes esto: | Se verá esto: |
|---|---|
|
texto subrayado |
|
texto destacado |
|
En versalita |
|
el emoji 😂 |
|
|
(*) Los emojis mejor desde el editor visual o copiándolos, por ejemplo, desde aquí, desde la Emojipedia, o desde Openemoji
Hay 2 sintaxis: inline y no-inline. En las 2 se usa la marca ^[]
Aquí voy a poner otra nota al píe [^1] , y otra más aquí[^b]
[^1]: Esta otra sintaxis me gusta menos. Pero igual es más clara
[^b]: No sufras por la numerácion. lo hará Pandoc!!| Markdown: | Se verá esto: |
|---|---|
|
Header 1 |
|
Header 2 |
|
Header 3 |
|
Header 4 |
|
Header 5 |
|
Header 6 |
<br> o <br><br>Extensión: más formas de crear “hard line breaks”
El “hard line break” también se puede hacer con <br>
El “hard line break” también se puede hacer con "\" seguido de nueva linea.
En una tabla, \ es la única forma de crear un salto de línea, ya que se ignoran los espacios finales en las celdas.
Extensión: un detalle que a veces es útil
| se mantienen (🤓)Extensión: “non-breaking spaces”
Los “non-breaking spaces” se utilizan para asegurarte de que las palabras que están a los lados del non-breaking-space no se separen en lineas diferentes.
En markdown, puedes insertar un “non-breaking-space” con CRTL + SPACE. Documentación oficial para Quarto aquí
Un non-breaking space, también conocido como espacio duro, es un carácter especial utilizado en tipografía y maquetación de textos para indicar un espacio que no debe ser separado en líneas diferentes. . Son útiles en casos donde se quiere mantener unidas palabras o elementos que deben permanecer juntos visualmente, por ejemplo en números de teléfono, siglas, fechas, etc …
En HTML, se representa con el código o  
|
|
|---|---|
|
https://quarto.org |
|
Web de Quarto |
Extensión: Cómo hacer que los links se abran en nueva página. Documentación oficial aquí
Extensión: enlaces internos de una web
_quarto.yml. Puedes leerlo aquí. Solo hay que especificar en el fichero _quarto.yml la opción target: _blank. Por ejemplo:En un documento .qmd puede haber links a secciones del propio documento
Por ejemplo:
para poner un “internal link” a una sección creada con ## Mis conclusiones
hemos de escribir: [Link a Mis conclusiones](#mis-conclusiones)
(Documentación oficial para las anchor-sections aquí y documentación de Pandoc aquí)
Imagina que tu proyecto/carpeta tiene esta estructura:
index.qmd que apunte a about.qmdindex.qmd lo siguiente:guia_usuario.qmd que apunte a glosario.qmdguia_usuario.qmd lo siguiente:{target="_blank"}index.qmd a docs/guia_usuario.qmd:index.qmd lo siguiente:]{.small90}{target="_blank"}Tarea 3.8: Markdown, incorporar una imagen de internet
Incorpora esta imagen al archivo prueba_01.qmd
La ruta a la imagen es:
Tarea 3.8b: Markdown, incorporar una imagen local
Guarda esta otra imagen dentro de my_qproject, concretamente dentro de la carpeta imagenes
Incorpora esa imagen (guardada en tu ordenador) al archivo prueba_01.qmd
```{r}
#| label: fig-penguins-01
#| fig-cap: Gráfico con datos de pingüinos
#| fig-width: 7
#| fig-asp: 0.618
#| output-location: column-fragment
#| code-line-numbers: "2|3|4-5|6|7"
library(tidyverse)
library(palmerpenguins)
pp <- ggplot(penguins,aes(
x = bill_length_mm, y = bill_depth_mm,
color = species, shape = species)) +
geom_point() +
theme_minimal() +
labs(x = "Bill length (mm)", y = "Bill depth (mm)")
pp
```Si escribes esto:
| Default | Left | Right | Center |
|---------|:-----|------:|:------:|
| 12 | 12 | 12 | 12 |
| 123 | 123 | 123 | 123 |
| 1 | 1 | 1 | 1 |
: Título de la tabla
Generará lo siguiente:
| Default | Left | Right | Center |
|---|---|---|---|
| 12 | 12 | 12 | 12 |
| 123 | 123 | 123 | 123 |
| 1 | 1 | 1 | 1 |
R tiene muchos paquetes para hacer tablas.
Por ejemplo: knitr::kable(df), o gt::gt(df), o DT::datatable(df) …
| Sepal.Length | Sepal.Width | Petal.Length | Petal.Width | Species |
|---|---|---|---|---|
| 5.1 | 3.5 | 1.4 | 0.2 | setosa |
| 4.9 | 3.0 | 1.4 | 0.2 | setosa |
| 4.7 | 3.2 | 1.3 | 0.2 | setosa |
| 4.6 | 3.1 | 1.5 | 0.2 | setosa |
| 5.0 | 3.6 | 1.4 | 0.2 | setosa |
| 5.4 | 3.9 | 1.7 | 0.4 | setosa |
Markdown admite ecuaciones escritas en Latex:
$ serán ecuaciones inline$$ para ecuaciones independientes.| Markdown Syntax | Output |
|---|---|
ecuación inline: $E = mc^{2}$ |
ecuación inline: \(E = mc^{2}\) |
ecuación independiente: $$E = mc^{2}$$ |
ecuación independiente: [E = mc^{2}] |
🤔, ya te digo yo que No
Desde 2020, concretamente desde la versión v.1.4, RStudio dispone de un editor visual
El editor visual facilita la inserción de los elementos que hemos ido viendo durante el curso. Documentación oficial aquí y aquí
La barra de herramientas del editor visual facilita el acceso a la mayoría de elementos que podemos insertar en nuestros documentos QMD:
Esto facilita la entrada a los documentos QMD
En algunos casos como imágenes y ciertas tablas, solo hay que arrastrar (o copiar y pegar) el contenido y aparecerá en nuestro documento fuente con la sintaxis adecuada.
Algunas referencias: Exploring RStudio’s Visual Markdown Editor, RStudio: el Nuevo Editor Visual
Tarea 3.9: Practicando con el editor visual
Incorpora una imagen a nuestro .qmd
Incorpora una tabla
Pandoc fenced divs, Pandoc bracketed spans
Layout, CSS, ….
… pero lo dejamos para más adelante , concretamente para cuando aprendamos a hacer slides y páginas web