Crear paquetes en R
1 Introducción
1.1 Definiciones previas (Creating R Packages: a tutorial)
- Package: An extension of the R base system with code, data and documentation in standardized format.
- Library: A directory containing installed packages.
- Repository: A website providing packages for installation.
1.2 Definiciones previas (Creating R Packages: a tutorial)
- Source: The original version of a package with human-readable text and code.
- Binary: A compiled version of a package with computer-readable text and code, may work only on a specific platform.
1.3 Definiciones previas (Creating R Packages: a tutorial)
- Base packages: Part of the R source tree, maintained by R Core.
- Recommended packages: Part of every R installation, but not necessarily maintained by R Core.
- Contributed packages: All the rest.
1.4 ¿Por qué crear y publicar un paquete para R?
1.5 ¿Por qué crear y publicar un paquete para R?
- Colaboración
- Permite publicar código de forma que pueda ser empleado por otros siguiendo unas estructuras comunes.
- Al distribuir las herramientas para que otros puedan usarlas, se obtiene realimentación sobre lo publicado, de forma que se aumenta su robustez, se amplian sus funcionalidades y se conecta con otras herramientas y proyectos.
1.6 ¿Por qué crear y publicar un paquete para R?
1.7 Algunos consejos genéricos
Extraído de Best Practices for Scientific Computing
- Write programs for people, not computers.
- Automate repetitive tasks
- Use the computer to record history
- Make incremental changes
- Use version control
- Don’t repeat yourself (or others)
- Plan for mistakes
- Optimize software only after it works correctly
- Document design and purpose, not mechanics
- Collaborate
1.8
2 Crear un paquete en R
2.1 Estructura
Las fuentes de un paquete de R están contenidas en un directorio que contiene al menos:
- Los ficheros DESCRIPTION y NAMESPACE
- Los subdirectorios:
R: código en ficheros .Rman: páginas de ayuda de las funciones, métodos y clases contenidos en el paquete.
Esta estructura puede ser generada con package.skeleton
2.2 DESCRIPTION
El fichero DESCRIPTION contiene la información básica:
Package: pkgname
Version: 0.5-1
Date: 2004-01-01
Title: My First Collection of Functions
Authors@R: c(person("Joe", "Developer", role = c("aut", "cre"),
email = "Joe.Developer@some.domain.net"),
person("Pat", "Developer", role = "aut"),
person("A.", "User", role = "ctb",
email = "A.User@whereever.net"))
Author: Joe Developer and Pat Developer, with contributions from A. User
Maintainer: Joe Developer <Joe.Developer@some.domain.net>
Depends: R (>= 1.8.0), nlme
Suggests: MASS
Description: A short (one paragraph) description of what
the package does and why it may be useful.
License: GPL (>= 2)
URL: http://www.r-project.org, http://www.another.url
- Los campos
Package,Version,License,Title,AuthoryMaintainerson obligatorios. - Si usa métodos
S4debe incluirDepends: methods
2.3 NAMESPACE
Rusa un sistema de gestión de espacio de nombres que permite al autor del paquete especificar:- las variables del paquete que se exportan (y son, por tanto, accesibles a los usuarios)
- las variables que se importan de otros paquetes.
- las clases y métodos
S3yS4que deben registrarse.
- Este mecanismo queda definido en el contenido del fichero
NAMESPACE.
2.4 NAMESPACE
El NAMESPACE controla la estrategia de búsqueda de variables
que utilizan las funciones del paquete:
- En primer lugar busca entre las creadas localmente (por el código de la carpeta
R/). - En segundo lugar busca entre las variables importadas explícitamente de otros paquetes.
- En tercer lugar busca en el
NAMESPACEdel paquetebase. - Por último busca siguiendo el camino habitual (ver el
resultado de
search())
2.5 NAMESPACE: variables
- Para exportar las variables
fyg:
export(f, g)
- Para importar todas las variables del paquete
pkgExt:
import(pkgExt)
- Para importar las variables
var1yvar2del paquetepkgExt:
importFrom(pkgExt, var1, var2)
2.6 NAMESPACE: clases y métodos
- Para registrar el método
S3printpara la clasemyClass:
S3method(print, myClass)
- Para usar clases y métodos
S4
import("methods")
- Para registrar las clases
S4class1yclass2:
exportClasses(class1, class2)
- Para registrar los métodos
S4method1ymethod2:
exportMethods(method1, method2)
- Para importar métodos y clases
S4de otro paquete:
importClassesFrom(package, ...) importMethodsFrom(package, ...)
2.7 Documentación
- Las páginas de ayuda de los objetos
Rse escriben usando el formato “R documentation” (Rd), un lenguaje similar a LaTeX. - Es aconsejable seguir estas orientaciones: Guidelines for Rd files
- Para generar el esqueleto de un fichero Rd es aconsejable usar:
prompt: genéricapromptClassypromptMethods: clases y métodos.promptPackage: paquetepromptData: datos
- Todos los comandos disponibles están en el documento Parsing Rd files.
2.8
\name{load}
\alias{load}
\title{Reload Saved Datasets}
\description{
Reload the datasets written to a file with the function
\code{save}.
}
\usage{
load(file, envir = parent.frame())
}
\arguments{
\item{file}{a connection or a character string giving the
name of the file to load.}
\item{envir}{the environment where the data should be
loaded.}
}
\seealso{
\code{\link{save}}.
}
\examples{
## save all data
save(list = ls(), file= "all.RData")
## restore the saved values to the current environment
load("all.RData")
## restore the saved values to the workspace
load("all.RData", .GlobalEnv)
}
\keyword{file}
2.9 Ejemplos
- Paquete simple: https://github.com/oscarperpinan/pkgEx
- Paquete con métodos S4: https://github.com/oscarperpinan/pkgMethods
3 Publicar un paquete
3.1 Itinerario
Comprobar
R CMD check myPackage/
Construir
R CMD build myPackage/
- Publicar (o actualizar) en un repositorio
3.2 Comprobar
- Comprobar un directorio (desde línea de comandos):
R CMD check myPackage/
- Comprobar un paquete ya construido (desde línea de comandos):
R CMD check myPackage.tar.gz
- Esta comprobación incluye más de 20 puntos de prueba detallados en el manual Writing R extensions.
3.3 Construir
- Fuente o binario B_block
Se puede construir un fichero fuente en formato tarball (independiente de la plataforma, habitual en sistemas Unix) o en forma binaria (dependiente de la plataforma, habitual para Windows y Mac).
- Cómo hacerlo B_ignoreheading
- Fuente en formato tarball: el resultado es un fichero tarball
myPackage.tar.gzque se puede distribuir a cualquier sistema.
R CMD build myPackage/
- Comprimido binario: el resultado es una copia comprimida de la versión instalada del paquete: depende del sistema operativo.
R CMD INSTALL --build myPackage/
- Fuente en formato tarball: el resultado es un fichero tarball
3.4 Comprobar y construir en sistemas Windows
- Para paquetes sin código compilado (C, Fortran), también se puede usar
R CMD checkyR CMD builden un sistema Windows. - Para generar un binario hay que usar
R CMD INSTALL --build.- Es posible que haya que modificar la variables de entorno
TEMPyTMPde forma que sólo contengan caracteres ASCII.
- Es posible que haya que modificar la variables de entorno
- Para paquetes con código compilado, o en caso de problemas con los comandos anteriores, hay que usar Rtools.
- Se pueden instalar fuentes tarball con (ver R installation and administration):
install.packages(myPackage.tar.gz, type='source')
3.5 Repositorios: CRAN
El principal repositorio de paquetes estables es CRAN.
- Publicar en este repositorio conlleva la aceptación de unas condiciones.
- Para publicar en CRAN hay que subir el fichero fuente tarball
resultado de
R CMD buildmediante el formulario web https://cran.r-project.org/submit.html siguiendo los pasos que allí se indican. - Es imprescindible haber comprobado el fichero con
R CMD check --as-cranantes de subirlo al formulario. El resultado de esta comprobación no debe contener errores, advertencias o notas. - Más detalle en el apartado Submission de las condiciones de CRAN.
3.6 Repositorios
Otros repositorios destacables son:
- GitHub (versiones de desarrollo)
- R-Forge (versiones de desarrollo)
- RForge (versiones de desarrollo)
- Bioconductor (paquetes de bioinformática)
3.7 Repositorios: GitHub
- GitHub es actualmente el repositorio de código más importante por número de usuarios y proyectos alojados.
- Documentación: Guías sobre GitHub.
- Existe una aplicación de escritorio.
- Emplea
gitpara realizar control de versiones.- Recursos para aprender a usar
git.
- Recursos para aprender a usar
- Proyectos de
Ren GitHub. - Instalar paquete desde GitHub:
install.packages('remotes') ## solo primera vez library(remotes) ## https://github.com/oscarperpinan/tdr install_github("oscarperpinan/tdr")