¿Por qué R?
Generamos reportes e informes para diversas actividades, a veces esos
reportes son repetitivos en el tiempo (por ejemplo informes mensuales,
informes al final de una campaña). Solemos utilizar más de un software
para generarlos, seguramente alguna hoja de cálculo y algún procesador
de texto. A veces sumamos algun aplicativo para hacer
presentaciones.
Si venís usándolos hace tiempo, seguro que aprendiste un montón de
trucos para sacarle el jugo al máximo, habrás aprendido a usar fórmulas,
tablas dinámicas, e incluso macros en las hojas de calculo y las
plantillas y estilos en los documentos de texto o las presentaciones.
Pero seguro que también sufriste sus limitaciones.
Por ejemplo, sn una hoja de cálculo no hay un límite claro entre
datos y análisis. Sobrescribir datos es un peligro muy real y análisis
complicados son imposibles de entender, especialmente si abrís una hoja
de cálculo armada por otra persona (que quizás es tu vos del pasado).
Además, repetir el análisis con datos distintos o cambiando algún
parámetro se puede volver muy engorroso.
Seguro también tenes que copiar y pegar resultados o pasos
intermedios de un software al otro, como un lindo gráfico de Excel al
documento de Word con el informe.
Si lo que necesitás son reportes frecuentes y automáticos, y análisis
de datos con muchas partes móviles, estaría bueno poder escribir una
receta paso a paso y que la computadora corra todo automáticamente cada
vez que se lo pedís. Para poder hacer eso, ese paso a paso tiene que
estar escrito en un lenguaje que la computadora pueda entender, ese
lenguaje es R.
¿Cómo vamos a trabajar?
Vamos a usar R como lenguaje de programación y RStudio como una IDE
(Integrated Development Environment), un Entorno Integrado de
Desarrollo. Si no los tenés instalado en tu computadora, no te
preocupes, tenemos este proyecto en RStudio Cloud
para que puedas trabajar.
Vamos a trabajar con archivos de RMarkdown para generar nuestro
reportes y poder guardar el código que genera nuestro análisis, así que
vamos a ver qué es un documento RMarkdown. Te preparamos este
informe de ejemplo, por favor abrilo en RStudio o en RStudio
Cloud.
RMarkdown
Un archivo RMarkdown es un archivo de texto plano, con algunas reglas
y una sintaxis especial que nos permite escribir código y texto juntos.
Cuando se “teje” (knit), el código se evaluará y ejecutará y el
texto se formateará de manera que se cree un informe o documento
reproducible que sea agradable de leer y que contenga todo tu
trabajo.
Esto es realmente crítico para la reproducibilidad. También nos
ahorra tiempo y puede ayudar en las tareas de automatización. Este
documento recreará tus figuras por ti en el mismo documento donde estás
escribiendo el texto que las explica. Esto le ahorrará el esfuerzo de
hacer un análisis, guardar un gráfico en un archivo, copiar y pegar ese
gráfico en Word o Power Point o Google Slides, y tener que hacerlo todo
de nuevo después de descubrir un error de tipeo.
Ahora veamos cómo es nuestro Informe de Cultivares.
- La parte superior tiene el Título y el tipo de salida (que en este
caso es un documento HTML).
- Debajo hay secciones alternas blancas y grises.
Estas son las dos secciones principales que componen un archivo
RMarkdown: * Las secciones grises son el código R * Las secciones
blancas son el texto de Markdown
- Hay texto negro, azul y verde.
Sigamos adelante y “tejamos (knit)” el documento haciendo clic en el
ovillo de hilo azul () en la parte
superior del archivo RMarkdown.
¡Acabamos de crear un archivo html! Se trata de una única página web
que estamos viendo localmente en nuestros propias computadoras. Al
generar este documento RMarkdown, R ha formateado el texto markdown y ha
ejecutado el código R.
Texto markdown
Podes ver una guia sobre rmarkdown en
esta guía rápida, pero aquí hay una sintaxis mínima para
empezar:
- encabezados empiezan con
#
o ##
y asi
siguiendo (es importante poner un espacio después del último
#
y antes de escribir el título).
- las palabras en negrita están rodeadas de
**
- y las cursiva, con
_
Código de R
El código R se escribe dentro de “chunks (bloques)” de
código. Los bloques de código comienzan con ```{r label}
(donde “label” es un nombre opcional y único) y terminan con
```
. En RStudio, podes crear un nuevo chunk con el atajo de
teclado Ctrl + Alt + I
.
Este informe muestra información sobre un cultivar, pero podríamos
cambiar algunas líneas de código para crear el mismo análisis para los
otros cultivares incluidos en la base de datos.
Ahora es tu turno. Sigue buscando en el código, si encuentras alguna
mención a “ACA 861”, cámbiala por cualquiera de los otros
cultivares.
Esta tarea es un poco engorrosa si hay que cambiar muchas cosas cada
vez que queremos volver a ejecutar el análisis para diferentes especies.
Pero no te preocupes, aprenderemos a hacer todo más automático al final
del taller.
LS0tDQp0aXRsZTogIkludHJvZHVjY2nDs24geSBSZXBvcnRlcyINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogZmFsc2UNCiAgICBoaWdobGlnaHQ6IHRhbmdvDQotLS0NCg0KIyMgwr9Qb3IgcXXDqSBSPw0KDQpHZW5lcmFtb3MgcmVwb3J0ZXMgZSBpbmZvcm1lcyBwYXJhIGRpdmVyc2FzIGFjdGl2aWRhZGVzLCBhIHZlY2VzIGVzb3MgcmVwb3J0ZXMgc29uIHJlcGV0aXRpdm9zIGVuIGVsIHRpZW1wbyAocG9yIGVqZW1wbG8gaW5mb3JtZXMgbWVuc3VhbGVzLCBpbmZvcm1lcyBhbCBmaW5hbCBkZSB1bmEgY2FtcGHDsWEpLiBTb2xlbW9zIHV0aWxpemFyIG3DoXMgZGUgdW4gc29mdHdhcmUgcGFyYSBnZW5lcmFybG9zLCBzZWd1cmFtZW50ZSBhbGd1bmEgaG9qYSBkZSBjw6FsY3VsbyB5IGFsZ8O6biBwcm9jZXNhZG9yIGRlIHRleHRvLiBBIHZlY2VzIHN1bWFtb3MgYWxndW4gYXBsaWNhdGl2byBwYXJhIGhhY2VyIHByZXNlbnRhY2lvbmVzLiANCg0KU2kgdmVuw61zIHVzw6FuZG9sb3MgaGFjZSB0aWVtcG8sIHNlZ3VybyBxdWUgYXByZW5kaXN0ZSB1biBtb250w7NuIGRlIHRydWNvcyBwYXJhIHNhY2FybGUgZWwganVnbyBhbCBtw6F4aW1vLCBoYWJyw6FzIGFwcmVuZGlkbyBhIHVzYXIgZsOzcm11bGFzLCB0YWJsYXMgZGluw6FtaWNhcywgZSBpbmNsdXNvIG1hY3JvcyBlbiBsYXMgaG9qYXMgZGUgY2FsY3VsbyB5IGxhcyBwbGFudGlsbGFzIHkgZXN0aWxvcyBlbiBsb3MgZG9jdW1lbnRvcyBkZSB0ZXh0byBvIGxhcyBwcmVzZW50YWNpb25lcy4gUGVybyBzZWd1cm8gcXVlIHRhbWJpw6luIHN1ZnJpc3RlIHN1cyBsaW1pdGFjaW9uZXMuDQoNClBvciBlamVtcGxvLCBzbiB1bmEgaG9qYSBkZSBjw6FsY3VsbyBubyBoYXkgdW4gbMOtbWl0ZSBjbGFybyBlbnRyZSBkYXRvcyB5IGFuw6FsaXNpcy4gU29icmVzY3JpYmlyIGRhdG9zIGVzIHVuIHBlbGlncm8gbXV5IHJlYWwgeSBhbsOhbGlzaXMgY29tcGxpY2Fkb3Mgc29uIGltcG9zaWJsZXMgZGUgZW50ZW5kZXIsIGVzcGVjaWFsbWVudGUgc2kgYWJyw61zIHVuYSBob2phIGRlIGPDoWxjdWxvIGFybWFkYSBwb3Igb3RyYSBwZXJzb25hIChxdWUgcXVpesOhcyBlcyB0dSB2b3MgZGVsIHBhc2FkbykuIEFkZW3DoXMsIHJlcGV0aXIgZWwgYW7DoWxpc2lzIGNvbiBkYXRvcyBkaXN0aW50b3MgbyBjYW1iaWFuZG8gYWxnw7puIHBhcsOhbWV0cm8gc2UgcHVlZGUgdm9sdmVyIG11eSBlbmdvcnJvc28uDQoNClNlZ3VybyB0YW1iacOpbiB0ZW5lcyBxdWUgY29waWFyIHkgcGVnYXIgcmVzdWx0YWRvcyBvIHBhc29zIGludGVybWVkaW9zIGRlIHVuIHNvZnR3YXJlIGFsIG90cm8sIGNvbW8gdW4gbGluZG8gZ3LDoWZpY28gZGUgRXhjZWwgYWwgZG9jdW1lbnRvIGRlIFdvcmQgY29uIGVsIGluZm9ybWUuDQoNClNpIGxvIHF1ZSBuZWNlc2l0w6FzIHNvbiByZXBvcnRlcyBmcmVjdWVudGVzIHkgYXV0b23DoXRpY29zLCB5IGFuw6FsaXNpcyBkZSBkYXRvcyBjb24gbXVjaGFzIHBhcnRlcyBtw7N2aWxlcywgZXN0YXLDrWEgYnVlbm8gcG9kZXIgZXNjcmliaXIgdW5hIHJlY2V0YSBwYXNvIGEgcGFzbyB5IHF1ZSBsYSBjb21wdXRhZG9yYSBjb3JyYSB0b2RvIGF1dG9tw6F0aWNhbWVudGUgY2FkYSB2ZXogcXVlIHNlIGxvIHBlZMOtcy4gUGFyYSBwb2RlciBoYWNlciBlc28sIGVzZSBwYXNvIGEgcGFzbyB0aWVuZSBxdWUgZXN0YXIgZXNjcml0byBlbiB1biBsZW5ndWFqZSBxdWUgbGEgY29tcHV0YWRvcmEgcHVlZGEgZW50ZW5kZXIsIGVzZSBsZW5ndWFqZSBlcyBSLg0KDQojIyDCv0PDs21vIHZhbW9zIGEgdHJhYmFqYXI/DQoNClZhbW9zIGEgdXNhciBSIGNvbW8gbGVuZ3VhamUgZGUgcHJvZ3JhbWFjacOzbiB5IFJTdHVkaW8gY29tbyB1bmEgSURFIChJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50KSwgdW4gRW50b3JubyBJbnRlZ3JhZG8gZGUgRGVzYXJyb2xsby4gU2kgbm8gbG9zIHRlbsOpcyBpbnN0YWxhZG8gZW4gdHUgY29tcHV0YWRvcmEsIG5vIHRlIHByZW9jdXBlcywgdGVuZW1vcyBlc3RlICBbcHJveWVjdG8gZW4gUlN0dWRpbyBDbG91ZF0oaHR0cHM6Ly9wb3NpdC5jbG91ZC9jb250ZW50LzY0MzEyODYpIHBhcmEgcXVlIHB1ZWRhcyB0cmFiYWphci4NCg0KVmFtb3MgYSB0cmFiYWphciBjb24gYXJjaGl2b3MgZGUgUk1hcmtkb3duIHBhcmEgZ2VuZXJhciBudWVzdHJvIHJlcG9ydGVzIHkgcG9kZXIgZ3VhcmRhciBlbCBjw7NkaWdvIHF1ZSBnZW5lcmEgbnVlc3RybyBhbsOhbGlzaXMsIGFzw60gcXVlIHZhbW9zIGEgdmVyIHF1w6kgZXMgdW4gZG9jdW1lbnRvIFJNYXJrZG93bi4gVGUgcHJlcGFyYW1vcyBbZXN0ZSBpbmZvcm1lIGRlIGVqZW1wbG9dKGh0dHBzOi8vZ2l0aHViLmNvbS95YWJlbGxpbmkvQWdyb1JlcG9ydGVzQ29uUi9ibG9iL21haW4vcmVwb3J0ZV9jdWx0aXZhcmVzLlJtZCksIHBvciBmYXZvciBhYnJpbG8gZW4gUlN0dWRpbyBvIGVuIFJTdHVkaW8gQ2xvdWQuIA0KDQoNCiMjIFJNYXJrZG93bg0KDQpVbiBhcmNoaXZvIFJNYXJrZG93biBlcyB1biBhcmNoaXZvIGRlIHRleHRvIHBsYW5vLCBjb24gYWxndW5hcyByZWdsYXMgeSB1bmEgc2ludGF4aXMgZXNwZWNpYWwgcXVlIG5vcyBwZXJtaXRlIGVzY3JpYmlyIGPDs2RpZ28geSB0ZXh0byBqdW50b3MuIEN1YW5kbyBzZSAidGVqZSIgKCprbml0KiksIGVsIGPDs2RpZ28gc2UgZXZhbHVhcsOhIHkgZWplY3V0YXLDoSB5IGVsIHRleHRvIHNlIGZvcm1hdGVhcsOhIGRlIG1hbmVyYSBxdWUgc2UgY3JlZSB1biBpbmZvcm1lIG8gZG9jdW1lbnRvIHJlcHJvZHVjaWJsZSBxdWUgc2VhIGFncmFkYWJsZSBkZSBsZWVyIHkgcXVlIGNvbnRlbmdhIHRvZG8gdHUgdHJhYmFqby4NCg0KRXN0byBlcyByZWFsbWVudGUgY3LDrXRpY28gcGFyYSBsYSByZXByb2R1Y2liaWxpZGFkLiBUYW1iacOpbiBub3MgYWhvcnJhIHRpZW1wbyB5IHB1ZWRlIGF5dWRhciBlbiBsYXMgdGFyZWFzIGRlIGF1dG9tYXRpemFjacOzbi4gRXN0ZSBkb2N1bWVudG8gcmVjcmVhcsOhIHR1cyBmaWd1cmFzIHBvciB0aSBlbiBlbCBtaXNtbyBkb2N1bWVudG8gZG9uZGUgZXN0w6FzIGVzY3JpYmllbmRvIGVsIHRleHRvIHF1ZSBsYXMgZXhwbGljYS4gRXN0byBsZSBhaG9ycmFyw6EgZWwgZXNmdWVyem8gZGUgaGFjZXIgdW4gYW7DoWxpc2lzLCBndWFyZGFyIHVuIGdyw6FmaWNvIGVuIHVuIGFyY2hpdm8sIGNvcGlhciB5IHBlZ2FyIGVzZSBncsOhZmljbyBlbiBXb3JkIG8gUG93ZXIgUG9pbnQgbyBHb29nbGUgU2xpZGVzLCB5IHRlbmVyIHF1ZSBoYWNlcmxvIHRvZG8gZGUgbnVldm8gZGVzcHXDqXMgZGUgZGVzY3VicmlyIHVuIGVycm9yIGRlIHRpcGVvLg0KDQpBaG9yYSB2ZWFtb3MgY8OzbW8gZXMgbnVlc3RybyBJbmZvcm1lIGRlIEN1bHRpdmFyZXMuDQoNCiogTGEgcGFydGUgc3VwZXJpb3IgdGllbmUgZWwgVMOtdHVsbyB5IGVsIHRpcG8gZGUgc2FsaWRhIChxdWUgZW4gZXN0ZSBjYXNvIGVzIHVuIGRvY3VtZW50byBIVE1MKS4NCiogRGViYWpvIGhheSBzZWNjaW9uZXMgYWx0ZXJuYXMgX2JsYW5jYXNfIHkgX2dyaXNlc18uIEVzdGFzIHNvbiBsYXMgZG9zIHNlY2Npb25lcyBwcmluY2lwYWxlcyBxdWUgY29tcG9uZW4gdW4gYXJjaGl2byBSTWFya2Rvd246DQogICAgICAqIExhcyBzZWNjaW9uZXMgZ3Jpc2VzIHNvbiBlbCBjw7NkaWdvIFINCiAgICAgICogTGFzIHNlY2Npb25lcyBibGFuY2FzIHNvbiBlbCB0ZXh0byBkZSBNYXJrZG93bg0KKiBIYXkgdGV4dG8gbmVncm8sIGF6dWwgeSB2ZXJkZS4NCg0KPiBTaWdhbW9zIGFkZWxhbnRlIHkgInRlamFtb3MgKGtuaXQpIiBlbCBkb2N1bWVudG8gaGFjaWVuZG8gY2xpYyBlbiBlbCBvdmlsbG8gZGUgaGlsbyBhenVsICg8aW1nIHNyYz0iaW1nL2tuaXQtYm90b24ucG5nIj4pIGVuIGxhIHBhcnRlIHN1cGVyaW9yIGRlbCBhcmNoaXZvIFJNYXJrZG93bi4gDQoNCsKhQWNhYmFtb3MgZGUgY3JlYXIgdW4gYXJjaGl2byBodG1sISBTZSB0cmF0YSBkZSB1bmEgw7puaWNhIHDDoWdpbmEgd2ViIHF1ZSBlc3RhbW9zIHZpZW5kbyBsb2NhbG1lbnRlIGVuIG51ZXN0cm9zIHByb3BpYXMgY29tcHV0YWRvcmFzLiBBbCBnZW5lcmFyIGVzdGUgZG9jdW1lbnRvIFJNYXJrZG93biwgUiBoYSBmb3JtYXRlYWRvIGVsIHRleHRvIG1hcmtkb3duIHkgaGEgZWplY3V0YWRvIGVsIGPDs2RpZ28gUi4NCg0KPGltZyBzcmM9ImltZy9tYXJrZG93bi1rbml0LnBuZyIgYWx0PSJSbWFya2Rvd24gYSBsYSBpenF1aWVyZGEuIERvY3VtZW50byBnZW5lcmFkbyBhIGxhIGRlcmVjaGEiLz4NCg0KIyMjIFRleHRvIG1hcmtkb3duDQoNClBvZGVzIHZlciB1bmEgZ3VpYSBzb2JyZSBybWFya2Rvd24gW2VuIGVzdGEgZ3XDrWEgcsOhcGlkYV0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3JzdHVkaW8vY2hlYXRzaGVldHMvbWFpbi90cmFuc2xhdGlvbnMvc3BhbmlzaC9ybWFya2Rvd25fZXMucGRmKSwgcGVybyBhcXXDrSBoYXkgdW5hIHNpbnRheGlzIG3DrW5pbWEgcGFyYSBlbXBlemFyOg0KDQoqIGVuY2FiZXphZG9zIGVtcGllemFuIGNvbiBgIyBgIG8gYCMjIGB5IGFzaSBzaWd1aWVuZG8gKGVzIGltcG9ydGFudGUgcG9uZXIgdW4gZXNwYWNpbyBkZXNwdcOpcyBkZWwgw7psdGltbyBgI2AgeSBhbnRlcyBkZSBlc2NyaWJpciBlbCB0w610dWxvKS4NCiogbGFzIHBhbGFicmFzIGVuIG5lZ3JpdGEgZXN0w6FuIHJvZGVhZGFzIGRlIGAqKmANCiogeSBsYXMgY3Vyc2l2YSwgY29uIGBfYA0KDQojIyMgQ8OzZGlnbyBkZSBSDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpjaHVua19zdGFydCA8LSAiYGBge3IgbGFiZWx9Ig0KY2h1bmtfZW5kIDwtICJgYGAiDQpgYGANCg0KRWwgY8OzZGlnbyBSIHNlIGVzY3JpYmUgZGVudHJvIGRlICIqY2h1bmtzKiAoYmxvcXVlcykiIGRlIGPDs2RpZ28uIExvcyBibG9xdWVzIGRlIGPDs2RpZ28gY29taWVuemFuIGNvbiBgYCBgciBjaHVua19zdGFydGAgYGAgKGRvbmRlICJsYWJlbCIgZXMgdW4gbm9tYnJlIG9wY2lvbmFsIHkgw7puaWNvKSB5IHRlcm1pbmFuIGNvbiBgYCBgciBjaHVua19lbmRgIGBgLiBFbiBSU3R1ZGlvLCBwb2RlcyBjcmVhciB1biBudWV2byBjaHVuayBjb24gZWwgYXRham8gZGUgdGVjbGFkbyBgQ3RybCArIEFsdCArIElgLg0KDQpFc3RlIGluZm9ybWUgbXVlc3RyYSBpbmZvcm1hY2nDs24gc29icmUgdW4gY3VsdGl2YXIsIHBlcm8gcG9kcsOtYW1vcyBjYW1iaWFyIGFsZ3VuYXMgbMOtbmVhcyBkZSBjw7NkaWdvIHBhcmEgY3JlYXIgZWwgbWlzbW8gYW7DoWxpc2lzIHBhcmEgbG9zIG90cm9zIGN1bHRpdmFyZXMgaW5jbHVpZG9zIGVuIGxhIGJhc2UgZGUgZGF0b3MuDQoNCg0KPiBBaG9yYSBlcyB0dSB0dXJuby4gU2lndWUgYnVzY2FuZG8gZW4gZWwgY8OzZGlnbywgc2kgZW5jdWVudHJhcyBhbGd1bmEgbWVuY2nDs24gYSAiQUNBIDg2MSIsIGPDoW1iaWFsYSBwb3IgY3VhbHF1aWVyYSBkZSBsb3Mgb3Ryb3MgY3VsdGl2YXJlcy4gDQoNCkVzdGEgdGFyZWEgZXMgdW4gcG9jbyBlbmdvcnJvc2Egc2kgaGF5IHF1ZSBjYW1iaWFyIG11Y2hhcyBjb3NhcyBjYWRhIHZleiBxdWUgcXVlcmVtb3Mgdm9sdmVyIGEgZWplY3V0YXIgZWwgYW7DoWxpc2lzIHBhcmEgZGlmZXJlbnRlcyBlc3BlY2llcy4gUGVybyBubyB0ZSBwcmVvY3VwZXMsIGFwcmVuZGVyZW1vcyBhIGhhY2VyIHRvZG8gbcOhcyBhdXRvbcOhdGljbyBhbCBmaW5hbCBkZWwgdGFsbGVyLiANCg0K