(Web del curso aquí)
20 de mayo de 2024
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”
Inspecciona los documentos que hay dentro de “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 |
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 label
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: setup
: si un chunk se llama setup
, este chunk se ejecutará siempre que ejecutes otro chunk del mismo documento. Esta opción suele usarse para cargar los paquetes necesarios para un análisis, de formas que estos siempre estén disponibles cuando ejecutes otro chunk. Esto puede ser una buena práctica.Extensió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?knitr
knitr
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: true
Todas 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
Hemos visto que podemos incluir código R en nuestro .qmd
.
El código R normalmente es ejecutado por el paquete knitr
. Para ello hay que usar estas marcas:
Pero, además, como estamos usando Markdown, podemos incorporar en nuestro .qmd
bloques de código no ejecutables.
Se usan las mismas marcas ```
, pero sin las llaves:
Pandoc soporta syntax highlighting para cerca de 140 different languages. si no estuviese el lenguaje que necesitas, usa el default
language.
Documentación oficial aquí.
Tarea 3.6: bloques de código no ejecutable
Utiliza el archivo prueba_01.qmd
para incorporar:
un bloque de código R no ejecutable
un bloque de código Phyton no ejecutable
Extensió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: html
Puedes convertir los chunks de código a la sintáxis actual con:
knitr::convert_chunk_header("doc.qmd", output = identity)
.html
Documentación oficial de Quarto aquí y su documento fuente
Una fantástica guía sobre Markdown aquí
Markdown fue creado por John Grueber y Aaron Swartz en 2004. Para saber más sobre Aaron Swartz puedes ver este documental.
Se creó con el objetivo de crear un formato de texto fácil de escribir y leer y que se convirtiera fácilmente en .html
Markdown is a text-to-HTML conversion tool for web writers.
Markdown 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.
En los documentos .qmd
, “todo” lo que no es el yaml o un chunk, es texto.
En Quarto el texto se escribe en Markdown
Como Quarto se basa en pandoc, se usa “Pandoc`s markdown”, una versión revisada y extendida de la propuesta original de Grueber
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í o desde la Emojipedia
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í
Si quieres que la página enlazada se abra en otra pestaña del navegador puedes:
{target="_blank"}
, con lo que nuestros enlaces quedarían como:link-external-newwindow: true
_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, podemos poner un “internal link” a una sección creada con ## Mis conclusiones
con: [Link a Mis conclusiones](#mis-conclusiones)
[página en una subcarpeta si mi página está en otra subcarpeta](../otra-sub-carpeta/otra-pagina.qmd)
{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 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