El primer ejemplo de informe que vimos se convirtió en un archivo
html. Pero ¿qué pasa con los archivos Word o PDF, que pueden ser más
útiles o esperados en algunas situaciones? RMarkdown, y todo un
ecosistema de otros paquetes, permite generar documentos en múltiples
formatos utilizando el mismo archivo de texto plano.
La forma de generar el formato del archivo de salida es cambiando la
opción output
de la cabecera.
Vuelve al informe de ejemplo y busca la línea que empieza por
output:
. Cambia html_document
por
pdf_document
.
También podes usar el botón “knit”, haciendo clic en la flechita de
la derecha para ver todas las opciones.
Ahora utiliza el botón para generar un documento de Word. ¿Qué
cambios ves en el encabezado del archivo?
Control del código
Nuestro ejemplo parece bastante ordenado. Hemos ocultado todo el
código y los mensajes de R para que puedas concentrar tu atención en la
tabla y las figuras. Pero este no es el comportamiento por defecto de un
archivo Rmd. Por lo general, la salida tendrá tanto el código como su
resultado, lo cual está bien cuando vos o la persona que leerá el
informe quiere ver el código que genera esos resultados, pero podría no
ser lo que la audiencia final del informe podría necesitar. Es usted
quien decide si quiere mostrar el código o no.
Para cambiar las opciones de un chunk de código, todo lo que tiene
que hacer es enumerar las opciones dentro de los corchetes. Por
ejemplo:
```{r nombre-del-chunk, echo = FALSE, message = FALSE}
```
Un conjunto de opciones particularmente importante son las que
controlan si el código se ejecuta y si el resultado del código
permanecerá en el informe o no:
eval = FALSE
impide que se ejecute el código del
chunk, por lo que tampoco mostrará los resultados. Es útil para mostrar
código de ejemplo si estás escribiendo, por ejemplo, un documento para
enseñar R.
echo = FALSE
ejecuta el código del chunk y muestra
los resultados, pero oculta el código en el informe. Esto es útil para
escribir informes para personas que no necesitan ver el código R que
generó el gráfico o la tabla.
include = FALSE
ejecuta el código pero oculta tanto
el código como los resultados. Es útil para configuración general donde
se cargan bibliotecas.
Si estás escribiendo un informe en el que no quieres que se muestre
ningún código, añadir echo = FALSE
a cada nuevo chunk se
vuelve tedioso. La solución es cambiar la opción globalmente para que se
aplique a todos los chunks. Esto se hace con la función
knitr::opts_chunk$set()
, que establece las opciones
globales de los chunks que le siguen. Encontrarás esta función en el
primer chunk “setup”.
```{r setup, include = FALSE}
knitr::opts_chunk$set(echo = FALSE,
message = FALSE,
warning = FALSE)
```
¿Tienes curiosidad por saber cómo funcionan las opciones? Cámbialas
de una en una y toca el archivo cada vez para ver qué cambia.
Automatización
Al principio de este taller te pedimos que cambiaras la especie de
pingüino en el informe de ejemplo. La tarea no fue fácil porque “Papua”
aparece varias veces y es fácil equivocarse. Parametrizar un informe nos
permite definir ese tipo de parámetros en un solo lugar y obtener
diferentes análisis a partir del mismo archivo.
Para generar un informe parametrizado hay que añadir un elemento
llamado params
a la cabecera con la lista de parámetros y
sus valores por defecto.
A partir de ahora, tendrás acceso a una variable llamada
params
que es una lista que contiene los parámetros y su
valor. Para acceder al valor de cada parámetro se utiliza el operador
$
de la siguiente manera:
## [1] "Papúa"
De este modo, el código original puede modificarse para utilizar el
valor de la especie almacenada en params$especie
.
pinguinos %>%
filter(especie == params$especie) %>%
ggplot(aes(x = largo_pico_mm, y = alto_pico_mm)) +
geom_point(color = "darkorange",
size = 3,
alpha = 0.8) +
geom_smooth(method = "lm", se = FALSE, color = "darkorange") +
theme_minimal() +
labs(title = "Dimensiones del pingüino",
subtitle = paste("Longitud y profundidad para los pingüinos", params$especie, "en Palmer Station LTER"),
x = "Largo del pico (mm)",
y = "Alto del pico (mm)",
color = "Especie de Pingüino")
Aquí cambiamos el subtítulo para concatenar palabras con el valor
almacenado en params$especie
, de esta manera podemos
construir el subtítulo de forma progamática.
Ahora el informe está listo para funcionar como un informe
parametrizado.
Por último, cambia “Papúa” en el yaml para generar un nuevo informe
para una de las otras especies.
LS0tDQp0aXRsZTogIkluZm9ybWVzIGRlIHR1IHRyYWJham8iDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZmxvYXQ6IGZhbHNlDQogICAgaGlnaGxpZ2h0OiB0YW5nbw0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KDQpjaHVuayA8LSAiYGBgIg0KYGBgDQoNCg0KRWwgcHJpbWVyIGVqZW1wbG8gZGUgaW5mb3JtZSBxdWUgdmltb3Mgc2UgY29udmlydGnDsyBlbiB1biBhcmNoaXZvIGh0bWwuIFBlcm8gwr9xdcOpIHBhc2EgY29uIGxvcyBhcmNoaXZvcyBXb3JkIG8gUERGLCBxdWUgcHVlZGVuIHNlciBtw6FzIMO6dGlsZXMgbyBlc3BlcmFkb3MgZW4gYWxndW5hcyBzaXR1YWNpb25lcz8gUk1hcmtkb3duLCB5IHRvZG8gdW4gZWNvc2lzdGVtYSBkZSBvdHJvcyBwYXF1ZXRlcywgcGVybWl0ZSBnZW5lcmFyIGRvY3VtZW50b3MgZW4gbcO6bHRpcGxlcyBmb3JtYXRvcyB1dGlsaXphbmRvIGVsIG1pc21vIGFyY2hpdm8gZGUgdGV4dG8gcGxhbm8uDQoNCkxhIGZvcm1hIGRlIGdlbmVyYXIgZWwgZm9ybWF0byBkZWwgYXJjaGl2byBkZSBzYWxpZGEgZXMgY2FtYmlhbmRvIGxhIG9wY2nDs24gYG91dHB1dGAgZGUgbGEgY2FiZWNlcmEuDQoNCj4gVnVlbHZlIGFsIGluZm9ybWUgZGUgZWplbXBsbyB5IGJ1c2NhIGxhIGzDrW5lYSBxdWUgZW1waWV6YSBwb3IgYG91dHB1dDpgLiBDYW1iaWEgYGh0bWxfZG9jdW1lbnRgIHBvciBgcGRmX2RvY3VtZW50YC4NCg0KVGFtYmnDqW4gcG9kZXMgdXNhciBlbCBib3TDs24gImtuaXQiLCBoYWNpZW5kbyBjbGljIGVuIGxhIGZsZWNoaXRhIGRlIGxhIGRlcmVjaGEgcGFyYSB2ZXIgdG9kYXMgbGFzIG9wY2lvbmVzLiANCg0KPiBBaG9yYSB1dGlsaXphIGVsIGJvdMOzbiBwYXJhIGdlbmVyYXIgdW4gZG9jdW1lbnRvIGRlIFdvcmQuIMK/UXXDqSBjYW1iaW9zIHZlcyBlbiBlbCBlbmNhYmV6YWRvIGRlbCBhcmNoaXZvPw0KDQojIyBDb250cm9sIGRlbCBjw7NkaWdvDQoNCk51ZXN0cm8gZWplbXBsbyBwYXJlY2UgYmFzdGFudGUgb3JkZW5hZG8uIEhlbW9zIG9jdWx0YWRvIHRvZG8gZWwgY8OzZGlnbyB5IGxvcyBtZW5zYWplcyBkZSBSIHBhcmEgcXVlIHB1ZWRhcyBjb25jZW50cmFyIHR1IGF0ZW5jacOzbiBlbiBsYSB0YWJsYSB5IGxhcyBmaWd1cmFzLiBQZXJvIGVzdGUgbm8gZXMgZWwgY29tcG9ydGFtaWVudG8gcG9yIGRlZmVjdG8gZGUgdW4gYXJjaGl2byBSbWQuIFBvciBsbyBnZW5lcmFsLCBsYSBzYWxpZGEgdGVuZHLDoSB0YW50byBlbCBjw7NkaWdvIGNvbW8gc3UgcmVzdWx0YWRvLCBsbyBjdWFsIGVzdMOhIGJpZW4gY3VhbmRvIHZvcyBvIGxhIHBlcnNvbmEgcXVlIGxlZXLDoSBlbCBpbmZvcm1lIHF1aWVyZSB2ZXIgZWwgY8OzZGlnbyBxdWUgZ2VuZXJhIGVzb3MgcmVzdWx0YWRvcywgcGVybyBwb2Ryw61hIG5vIHNlciBsbyBxdWUgbGEgYXVkaWVuY2lhIGZpbmFsIGRlbCBpbmZvcm1lIHBvZHLDrWEgbmVjZXNpdGFyLiBFcyB1c3RlZCBxdWllbiBkZWNpZGUgc2kgcXVpZXJlIG1vc3RyYXIgZWwgY8OzZGlnbyBvIG5vLiANCg0KUGFyYSBjYW1iaWFyIGxhcyBvcGNpb25lcyBkZSB1biBjaHVuayBkZSBjw7NkaWdvLCB0b2RvIGxvIHF1ZSB0aWVuZSBxdWUgaGFjZXIgZXMgZW51bWVyYXIgbGFzIG9wY2lvbmVzIGRlbnRybyBkZSBsb3MgY29yY2hldGVzLiBQb3IgZWplbXBsbzoNCg0KICAgIGByIGNodW5rYHtyIG5vbWJyZS1kZWwtY2h1bmssIGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFfQ0KICAgIA0KICAgIGByIGNodW5rYA0KDQpVbiBjb25qdW50byBkZSBvcGNpb25lcyBwYXJ0aWN1bGFybWVudGUgaW1wb3J0YW50ZSBzb24gbGFzIHF1ZSBjb250cm9sYW4gc2kgZWwgY8OzZGlnbyBzZSBlamVjdXRhIHkgc2kgZWwgcmVzdWx0YWRvIGRlbCBjw7NkaWdvIHBlcm1hbmVjZXLDoSBlbiBlbCBpbmZvcm1lIG8gbm86DQoNCiogYGV2YWwgPSBGQUxTRWAgaW1waWRlIHF1ZSBzZSBlamVjdXRlIGVsIGPDs2RpZ28gZGVsIGNodW5rLCBwb3IgbG8gcXVlIHRhbXBvY28gbW9zdHJhcsOhIGxvcyByZXN1bHRhZG9zLiBFcyDDunRpbCBwYXJhIG1vc3RyYXIgY8OzZGlnbyBkZSBlamVtcGxvIHNpIGVzdMOhcyBlc2NyaWJpZW5kbywgcG9yIGVqZW1wbG8sIHVuIGRvY3VtZW50byBwYXJhIGVuc2XDsWFyIFIuDQoNCiogYGVjaG8gPSBGQUxTRWAgZWplY3V0YSBlbCBjw7NkaWdvIGRlbCBjaHVuayB5IG11ZXN0cmEgbG9zIHJlc3VsdGFkb3MsIHBlcm8gb2N1bHRhIGVsIGPDs2RpZ28gZW4gZWwgaW5mb3JtZS4gRXN0byBlcyDDunRpbCBwYXJhIGVzY3JpYmlyIGluZm9ybWVzIHBhcmEgcGVyc29uYXMgcXVlIG5vIG5lY2VzaXRhbiB2ZXIgZWwgY8OzZGlnbyBSIHF1ZSBnZW5lcsOzIGVsIGdyw6FmaWNvIG8gbGEgdGFibGEuDQoNCiogYGluY2x1ZGUgPSBGQUxTRWAgZWplY3V0YSBlbCBjw7NkaWdvIHBlcm8gb2N1bHRhIHRhbnRvIGVsIGPDs2RpZ28gY29tbyBsb3MgcmVzdWx0YWRvcy4gRXMgw7p0aWwgcGFyYSBjb25maWd1cmFjacOzbiBnZW5lcmFsIGRvbmRlIHNlIGNhcmdhbiBiaWJsaW90ZWNhcy4NCg0KU2kgZXN0w6FzIGVzY3JpYmllbmRvIHVuIGluZm9ybWUgZW4gZWwgcXVlIG5vIHF1aWVyZXMgcXVlIHNlIG11ZXN0cmUgbmluZ8O6biBjw7NkaWdvLCBhw7FhZGlyIGBlY2hvID0gRkFMU0VgIGEgY2FkYSBudWV2byBjaHVuayBzZSB2dWVsdmUgdGVkaW9zby4gTGEgc29sdWNpw7NuIGVzIGNhbWJpYXIgbGEgb3BjacOzbiBnbG9iYWxtZW50ZSBwYXJhIHF1ZSBzZSBhcGxpcXVlIGEgdG9kb3MgbG9zIGNodW5rcy4gRXN0byBzZSBoYWNlIGNvbiBsYSBmdW5jacOzbiBga25pdHI6Om9wdHNfY2h1bmskc2V0KClgLCBxdWUgZXN0YWJsZWNlIGxhcyBvcGNpb25lcyBnbG9iYWxlcyBkZSBsb3MgY2h1bmtzIHF1ZSBsZSBzaWd1ZW4uIEVuY29udHJhcsOhcyBlc3RhIGZ1bmNpw7NuIGVuIGVsIHByaW1lciBjaHVuayAic2V0dXAiLg0KDQogICAgYHIgY2h1bmtge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCiAgICBrbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCANCiAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gRkFMU0UsDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFKQ0KICAgIGByIGNodW5rYA0KICAgIA0KPiDCv1RpZW5lcyBjdXJpb3NpZGFkIHBvciBzYWJlciBjw7NtbyBmdW5jaW9uYW4gbGFzIG9wY2lvbmVzPyBDw6FtYmlhbGFzIGRlIHVuYSBlbiB1bmEgeSB0b2NhIGVsIGFyY2hpdm8gY2FkYSB2ZXogcGFyYSB2ZXIgcXXDqSBjYW1iaWEuDQoNCg0KIyMgQXV0b21hdGl6YWNpw7NuDQoNCkFsIHByaW5jaXBpbyBkZSBlc3RlIHRhbGxlciB0ZSBwZWRpbW9zIHF1ZSBjYW1iaWFyYXMgbGEgZXNwZWNpZSBkZSBwaW5nw7xpbm8gZW4gZWwgaW5mb3JtZSBkZSBlamVtcGxvLiBMYSB0YXJlYSBubyBmdWUgZsOhY2lsIHBvcnF1ZSAiUGFwdWEiIGFwYXJlY2UgdmFyaWFzIHZlY2VzIHkgZXMgZsOhY2lsIGVxdWl2b2NhcnNlLiBQYXJhbWV0cml6YXIgdW4gaW5mb3JtZSBub3MgcGVybWl0ZSBkZWZpbmlyIGVzZSB0aXBvIGRlIHBhcsOhbWV0cm9zIGVuIHVuIHNvbG8gbHVnYXIgeSBvYnRlbmVyIGRpZmVyZW50ZXMgYW7DoWxpc2lzIGEgcGFydGlyIGRlbCBtaXNtbyBhcmNoaXZvLiANCg0KUGFyYSBnZW5lcmFyIHVuIGluZm9ybWUgcGFyYW1ldHJpemFkbyBoYXkgcXVlIGHDsWFkaXIgdW4gZWxlbWVudG8gbGxhbWFkbyBgcGFyYW1zYCBhIGxhIGNhYmVjZXJhIGNvbiBsYSBsaXN0YSBkZSBwYXLDoW1ldHJvcyB5IHN1cyB2YWxvcmVzIHBvciBkZWZlY3RvLg0KDQpgYGB5YW1sDQpwYXJhbXM6DQogIGVzcGVjaWU6IFBhcMO6YQ0KYGBgDQoNCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQ0KcGFyYW1zIDwtIGxpc3QoZXNwZWNpZSA9ICJQYXDDumEiKQ0KYGBgDQoNCkEgcGFydGlyIGRlIGFob3JhLCB0ZW5kcsOhcyBhY2Nlc28gYSB1bmEgdmFyaWFibGUgbGxhbWFkYSBgcGFyYW1zYCBxdWUgZXMgdW5hIGxpc3RhIHF1ZSBjb250aWVuZSBsb3MgcGFyw6FtZXRyb3MgeSBzdSB2YWxvci4gUGFyYSBhY2NlZGVyIGFsIHZhbG9yIGRlIGNhZGEgcGFyw6FtZXRybyBzZSB1dGlsaXphIGVsIG9wZXJhZG9yIGAkYCBkZSBsYSBzaWd1aWVudGUgbWFuZXJhOg0KDQpgYGB7cn0NCnBhcmFtcyRlc3BlY2llDQpgYGANCg0KRGUgZXN0ZSBtb2RvLCBlbCBjw7NkaWdvIG9yaWdpbmFsIHB1ZWRlIG1vZGlmaWNhcnNlIHBhcmEgdXRpbGl6YXIgZWwgdmFsb3IgZGUgbGEgZXNwZWNpZSBhbG1hY2VuYWRhIGVuIGBwYXJhbXMkZXNwZWNpZWAuDQoNCmBgYHtyIGV2YWw9RkFMU0V9DQpwaW5ndWlub3MgJT4lIA0KICBmaWx0ZXIoZXNwZWNpZSA9PSBwYXJhbXMkZXNwZWNpZSkgJT4lIA0KICBnZ3Bsb3QoYWVzKHggPSBsYXJnb19waWNvX21tLCB5ID0gYWx0b19waWNvX21tKSkgKw0KICBnZW9tX3BvaW50KGNvbG9yID0gImRhcmtvcmFuZ2UiLA0KICAgICAgICAgICAgIHNpemUgPSAzLA0KICAgICAgICAgICAgIGFscGhhID0gMC44KSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UsIGNvbG9yID0gImRhcmtvcmFuZ2UiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIGxhYnModGl0bGUgPSAiRGltZW5zaW9uZXMgZGVsIHBpbmfDvGlubyIsDQogICAgICAgc3VidGl0bGUgPSBwYXN0ZSgiTG9uZ2l0dWQgeSBwcm9mdW5kaWRhZCBwYXJhIGxvcyBwaW5nw7xpbm9zIiwgcGFyYW1zJGVzcGVjaWUsICJlbiBQYWxtZXIgU3RhdGlvbiBMVEVSIiksDQogICAgICAgeCA9ICJMYXJnbyBkZWwgcGljbyAobW0pIiwNCiAgICAgICB5ID0gIkFsdG8gZGVsIHBpY28gKG1tKSIsDQogICAgICAgY29sb3IgPSAiRXNwZWNpZSBkZSBQaW5nw7xpbm8iKSANCmBgYA0KDQpBcXXDrSBjYW1iaWFtb3MgZWwgc3VidMOtdHVsbyBwYXJhIGNvbmNhdGVuYXIgcGFsYWJyYXMgY29uIGVsIHZhbG9yIGFsbWFjZW5hZG8gZW4gYHBhcmFtcyRlc3BlY2llYCwgZGUgZXN0YSBtYW5lcmEgcG9kZW1vcyBjb25zdHJ1aXIgZWwgc3VidMOtdHVsbyBkZSBmb3JtYSBwcm9nYW3DoXRpY2EuDQoNCkFob3JhIGVsIGluZm9ybWUgZXN0w6EgbGlzdG8gcGFyYSBmdW5jaW9uYXIgY29tbyB1biBpbmZvcm1lIHBhcmFtZXRyaXphZG8uDQoNCj4gUG9yIMO6bHRpbW8sIGNhbWJpYSAiUGFww7phIiBlbiBlbCB5YW1sIHBhcmEgZ2VuZXJhciB1biBudWV2byBpbmZvcm1lIHBhcmEgdW5hIGRlIGxhcyBvdHJhcyBlc3BlY2llcy4g