Objetivo

Crear un R package sencillo pero funcional que sirva para distribuir los materiales docentes de un curso en el que se usa R. El package se alojará en Github para facilitar su instalación.

El package contendrá lo siguiente:

  • 2 funciones (con su correspondiente documentación)

  • Una de las 2 funciones usará funciones de otro(s) package, así que habrá que importar esa función a nuestro package

  • 2 ficheros de datos

  • Un archivo con documentación más extensa (vignette), donde se podrían incluir los scripts a usar en los ejercicios/prácticas de clase

Se hará de la forma más rápida y simple, que a mi juicio es usando un “Rproject de RStudio” y el package devtools. Gestionar todo en un Rproject facilita muchos las cosas, sobre todo cuando más adelante subamos nuestro package a Gitbub. devtools es un package desarrollado por Hadley Wickham que sirve para crear R packages, facilita mucho la tarea de crear y gestionar packages.

Es imposible en 20 minutos explicarlo todo, así que seré fundamentalmente práctico: me centraré en el proceso de creación. Es evidente que para entender muchos/todos los detalles y posibilidades en la creación de un package hay que leer algunas referencias. Al final de este tutorial daré referencias donde se explica con distinto nivel de detalle el proceso de creación de un R package.



Preparación del ordenador

Para poder construir nuestro package necesitamos tener instalado lo siguiente:

  • Obviamente R y RStudio
  • Los siguientes packages install.packages(c(“devtools”, “roxygen2”, “knitr”))

Además, según tu sistema operativo necesitas (esto está fusilado de este libro

  • On Windows, download and install Rtools. NB: this is not an R package!

  • On Mac, make sure you have either XCode (available for free in the App Store) or the “Command Line Tools for Xcode”. You’ll need to have a (free) Apple ID.

  • On Linux, make sure you’ve installed not only R, but also the R development tools. For example, on Ubuntu (and Debian) you need to install the r-base-dev package.

Para chequear que tenéis Rtools instalado (si es que trabajáis en un PC con Windows) podéis hacerlo con has_devel() así:

library(devtools)
has_devel()
#> '/Library/Frameworks/R.framework/Resources/bin/R' --vanilla CMD SHLIB foo.c 
#> 
#> clang -I/Library/Frameworks/R.framework/Resources/include -DNDEBUG 
#>   -I/usr/local/include -I/usr/local/include/freetype2 -I/opt/X11/include
#>   -fPIC  -Wall -mtune=core2 -g -O2  -c foo.c -o foo.o
#> clang -dynamiclib -Wl,-headerpad_max_install_names -undefined dynamic_lookup
#>   -single_module -multiply_defined suppress -L/usr/local/lib -o foo.so foo.o 
#>   -F/Library/Frameworks/R.framework/.. -framework R -Wl,-framework 
#>   -Wl,CoreFoundation
[1] TRUE

Si todo esta correcto recibiréis un mensaje de [1] TRUE



Visión general de un package

Podemos pensar que es un package es un conjunto de archivos dentro de una carpeta. Veamos la estructura típica de esa carpeta: