Webs con RMarkdown
By [paocorrales] in Español workshop
November 28, 2020
Querés compartir tus resultados y tenés un archivo RMarkdown en el que estuviste trabajando. Podrías compartir la carpeta del proyecto o un link a un repositorio pero sería ideal que cualquier persona pueda ver esos hermosos resultados sin necesidad de correr código. La otra alternativa es knitear el documento para compartir un PDF o archivo de Word. Las opciones no terminan ahí, Rmarkdown abre un mundo de posibilidades para trabajar con código de R, texto y además compartir los resultados (y cualquier otra cosa!).
Un único .Rmd
Podés publicar como web el contenido de un único archivo .Rmd aprovechando las características y posibilidades de {rmarkdown}. Un ejemplo de eso lo encontras en:
https://01-webs-rmarkdown.netlify.app/
Y podés revisar el código fuente acá.
Muchos .Rmd
Pero tal vez el contenido que querés mostrar es más complejo y poner todo en un único .Rmd no termina de funcionar. {rmarkdown} también permite generar una web con estructura compleja (una barra de navegación con botones y menues entre otras maravillas) a partir de un archivo de configuración y todos los .rmd que necesites. El ejemplo de una web de este estilo se encuenta en:
https://02-webs-rmarkdown.netlify.app/
Y el código fuente acá.
Un blog
La cosa se puso sería y ahora un par de botones y un menú no es suficiente para compartir, por ejemplo, un post por semana o un CV online para mostrar lo que haces. {blogdown} une la mágia de {rmarkdown} con Hugo, un generador de sitios estático con un millar de temas para elegir.
Ahora la estructura de esa web es más compleja pero igual que antes, hay un archivo de configuración que controla el comportamiento y la aperiencia del sitio final. Este es un ejemplo de blog usando un tema particular:
https://03-webs-rmarkdown.netlify.app/
Y el código fuente que lo genera acá.
Todos los ejemplos anteriores contienen en si mismos las instrucciones para generarse a si mismos y publicarlos usando la opción “Drag & Drop” de Netlify.
Palabras finales sobre la publicación
Netlify
La opción de arrastrar la carpeta que contiene la web en Netlify puede se útil al principio pero se vuelve trabajoso rápidamente, sería genial que fuera automático. Y se puede.
Netlify tiene dos habilidades muy útiles, la primera es que se puede conectar con un repositorio en, por ejemplo, GitHub donde viva la página web. La segunda es que puede construir webs usando Hugo desde sus servidores, lo que nos ahorra tener que hacerlo localmente.
Luego de haber publicado algunas webs así me encontré con algunos problemas y sus soluciones:
- Si la web está construida solo con {rmarkdown}, Netlify necesita saber que la carpeta “_site” es la que contiene la web, de otra manera va a dar error. Alternativamente se puede cambiar la configuración de la web desde el “_site.yml” para que construya la web una carpeta que se llame “public”
- Si se traba de un blog con {blogdown}, la versión de Hugo importa. En las nnuevas versiones de {blogdown}, al generar un nuevo blog se crea un archivo que se llama “netlify.toml” donde podemos indicar la versión de Hugo que debe usar Netlify. Pero también podemos modificar esto desde la configuración del sitio en Netlify.
GitHub Pages
Netlify no es el único servicio que permite hostear una web. Hay muchos otros, por ejemplo GitHub Pages. En este caso si o si necesitamos usar un repositorio donde esté, al menos, los htmls que generan la web.
Una de las diferencias importantes es que GitHub Pages busca la web enla carpeta raíz o alternativamente en una carpeta dentro del repositorio que debe llamarse “docs”. La buena noticia es que tanto usando solo {rmarkdown} como usando {blogdown} se puede indicar en el archivo de configuración que nombre debe tener la carpeta que contenga el sitio construiido.
La mala noticia es que no construye automáticamente el sitio como si lo hace Netlify. Todo no se puede :)
Todo lo anterior forma parte de una pequeña charla que dí para el Club de R para RRHH. Pueden encontrar la presentación que hila los 3 ejemplos de webs acá.
- Posted on:
- November 28, 2020
- Length:
- 4 minute read, 696 words