Programación y manejo de datos con R (Slides 07-B)
4 de septiembre de 2023
Los documentos que generemos serán reproducibles: generaremos directamente el documento final sin copiar ni pegar nada, sino usando código.
Para ello, hemos de aprender a escribir en QMD (Quarto Markdown) (❗❗)
. . . aunque, con Quarto se pueden generar documentos de muchos tipos (artículos académicos, libros, tesis, cartas, cuadros de mando, etc … etc …) y formatos (html, pdf, epub, docx, beamer, pptx, etc … etc …).
Para verlo puedes visitar la Quarto gallery
¿Qué es Quarto?
¿Cómo trabajaremos con Quarto?
No “veremos” a Quarto.
Daremos ordenes a Quarto a través de RStudio
Repito, vamos a trabajar con proyectos, concretamente con …
… Quarto projects o Qprojects
Pero usarlos tiene ventajas. Puedes ver algunas en este post de Jenny Bryan
Para nosotros la principal ventaja consiste en que podremos usar rutas relativas
File > New Project > New Directory > Quarto Project
, y ponerle un nombre a la carpeta del Qproject.Tarea 2.3: Creación de un Qproject
Simplemente tienes que crear un Qproject que se llame “my_primer_qproject”
Mejor si creas el Qproject en el Escritorio
Mira cuantos archivos hay en la carpeta del proyecto
.Rproj
Tarea 2.4: Abriendo y cerrando Qproject’s
Cierra RStudio
Vuelve a abrir el Qproject "my_primer_qproject"
Asegúrate de que realmente “estás” en "my_primer_qproject"
.Rproj
.qmd
Vamos ya a crear nuestro primer fichero .qmd
… eso sí, lo crearemos dentro de un Qproject
Tarea 2.5: Crear un fichero .qmd
(Un Quarto document)
En el Qproject "my_primer_qproject"
, crea un “Quarto document”
Durante el proceso de creación te pedirá un “Title” y un “Author”: pon lo que quieras
El fichero que acabamos de crear es nuestro documento fuente
Pégale un vistazo al documento fuente, antes de que Quarto lo procese, para intentar descubrir sus partes
De momento, es mejor que visualicemos el documento en formato “Source”
Procesa (“Render”) el documento .qmd
que acabamos de crear.
Al intentar procesarlo te pedirá un nombre. LLamalo index
¿Qué ha pasado finalmente?
Nos servirá para familiarizarnos con :
la interfaz de Rstudio
los conceptos de documento fuente (.qmd) y documento final (.html, .pdf, etc…)
… y empezar a entender la sintaxis de “Quarto Markdown”
Tarea 2.6a: Creamos un nuevo qmd: "prueba_01.qmd"
Vamos a crear un nuevo documento “.qmd”.
Procésalo. Esta vez llámalo prueba_01.qmd
Tarea 2.6b: Reusamos "prueba_01.qmd"
para crear un pdf
Vamos a reusar el fichero fuente prueba_01.qmd
para generar un pdf. Para ello:
En el encabezamiento has de cambiar “format: html
” por “format: pdf
”
PERO si al intentar procesarlo te dice que instales “tinytex”, entonces para, no lo hagas!!, ya lo haremos en el descanso. Para ello tendrás que ejecutar en la Terminal quarto install tinytext
Tarea 2.6d: Vamos a cambiar la apariencia visual de las slides
Tarea 2.6e: Ahora vamos a cambiar el “theme” usado en el fichero index.qmd
El listado de “themes” lo tienes aquí
Piensa bien cómo has de dejar el “yaml”. Apóyate en lo que hemos hecho para las slides
La solución está más adelante, pero no la mires
Tarea 2.8: Añade una nueva página a nuestra página web
index.qmd
Trabajamos con Qprojects
Documento fuente escrito en Qmd genera diferentes outputs
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
llamado 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 |
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:
# install.packages(tidyverse)
library(ggplot2)
ggplot(iris, aes(Sepal.Length, Petal.Length)) + geom_point()
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
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
label:
en el YAML?Extensión: uso de la opción include
include:
en el YAML?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.
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 26 de junio de 2023.
pero lo que queremos es que la fecha se modifique cada vez que se procese el documento prueba_01.qmd
.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í
Se usa la marca ^
, y hay 2 sintaxis:
1.Con sintaxis inline:
Sintáxis (inline) para insertar una nota al píe^[Se llama inline
porque el contenido de la nota al píe se entremezcla con el texto principal]. Suele ser
la sintáxis que yo uso.
Aquí voy a poner otra nota al píe [^1] , y otra más.[^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: ¿cómo dejar más espacio entre palabras?
Por lo tanto, si quieres separar palabras con más de un espacio, tendrás que usar lo que en html se conoce como “entities”:
(1 espacio)  
(2 espacios) y  
(4 espacios).
<pre>
.Extensión: un detalle que a veces es útil
|
se mantienen (🤓)
|
|
---|---|
|
https://quarto.org |
|
Web de Quarto |
Extensión: Cómo hacer que los links se abran en nueva página
Si quieres que la página enlazada se abra en otra pestaña del navegador puedes:
Especificarlo en el YAML con link-external-newwindow: true
Añadir {target="_blank"}
, con lo que nuestros enlaces quedarían como:
_quarto.yml
. Puedes leerlo aquíTarea 3.8: Markdown, incorporar una imagen
prueba_01.qmd
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
```
| Right | Left | Default | Center |
|------:|:-----|---------|:------:|
| 12 | 12 | 12 | 12 |
| 123 | 123 | 123 | 123 |
| 1 | 1 | 1 | 1 |
: Título de la tabla
Genera lo siguiente:
Default | Left | Right | Center |
---|---|---|---|
12 | 12 | 12 | 12 |
123 | 123 | 123 | 123 |
1 | 1 | 1 | 1 |
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
Pandoc fenced divs, Pandoc bracketed spans
Layout, CSS, ….
… pero lo dejamos para más adelante
Quarto puede hacer slides de varios tipos (ppt, slidy, beamer)
Nos centraremos en el formato Revealjs
Hay algunas especificidades que vamos a ver
Veremos primero aspectos comunes a todos los formatos de slides
File > New File > Quarto Presentation
.En imágenes:
Los títulos de primer nivel crean una nueva slide (y tb una nueva sección)
Los títulos de segundo nivel crean una nueva slide.
---
⚠️ Para crear pausas en la presentación has de usar las siguientes marcas:
. . .
(es decir, tres puntos separados por espacios)
columns
.To put material in side by side columns, you can use a native div container with class .columns, containing two or more div containers with class .column and a width attribute. – Documentacion oficial de Quarto
La primera slide se crea automáticamente si pones un título en el YAML
Si el contenido que queremos poner no se ajusta a la slide, tenemos varias posibilidades:
En mi opinión las slides mejoran bastante estéticamente si en alguna de ellas cambiamos el fondo. La documentación está aquí
## Slide Title {background-video="video.mp4" background-video-loop="true" background-video-muted="true"}
## Slide Title {background-color="black" background-image="https://placekitten.com/100/100" background-size="100px" background-repeat="repeat"}
## Slide Title {background-iframe="https://www.uv.es"}
Para poner un color de fondo:
Para poner una imagen de fondo:
Parallax background. Documentación aquí
Inspiración, vamos, copiado de https://emilhvitfeldt.github.io/useR2022-textrecipes
Transition | Description |
---|---|
none |
No transition (switch instantly) |
fade |
Cross fade |
slide |
Slide horizontally |
convex |
Slide at a convex angle |
concave |
Slide at a concave angle |
zoom |
Scale the incoming slide so it grows in from the center of the screen. |
Además disponemos de muchos otros themes en extensiones en la web de Quarto y en Awesome Quarto
Por ejemplo: los themes 4 estaciones, Inversa, Insper, …
Some good practices for research with Rde Etienne Bacher, el repo aquí
The Genesis of Experimentation de Emi Tanaka, el repo aquí
ggdensity: Improved density visualization in R de James Otto y David Kahle, el repo aquí
Extending ggplot2 with custom Geoms and Stats de James Otto, el repo aquí
Quarto/RMarkdown - What’s Different?, de TED Laderas. Vídeo
An Antarctic Tour of the Tidyverse de Silvia Canelon, el repo aquí
Hello Quarto de Mine Çetinkaya-Rundel y Julia Stewart Lowndes, el repo aquí, más cosas
Reproducible authoring with Quarto de Mine Çetinkaya-Rundel, el repo aquí
What can I do with Quarto? de Nicola Rennie, su web aquí
Reproducible Publications w/ Python and Quarto de Thomas Mock
Improvements in text preprocessing using textrecipes de Emil Hvitfeldt
The Happiest Notebooks on Earth de Allison Hill
Quarto Presentations by Quarto team, el repo aquí. Documentación oficial aquí
Intro to Quarto de Isabella Velásquez, el repo aquí
Un buen post sobre Revealjs slides de Meghan Hall
Data Science Portfolio with Quarto de Deepsha Menghani, el repo aquí. Vídeo aquí
05 - Presentations Making Slides with Code y 02 - Authoring Quarto de Thomas Mock. Slides que pertenecen al siguiente taller Get started with Quarto
Beamer
Power Point
Slidy
User Guide oficial de Beamer
Documentación oficial Beamer de Quarto aquí
Opciones de YAMl de Beamer en Quarto aquí
Beamer en StackOverflow. Por ejemplo:
Web del curso: https://perezp44.github.io/intro-ds-23-24-web