crear paquetes en r - oscar perpiñán lamigueirooscarperpinan.github.io/r/paquetes.pdf · i para...

24
Crear paquetes en R Oscar Perpiñán Lamigueiro Introducción Crear un paquete en R Publicar un paquete Crear paquetes en R Oscar Perpiñán Lamigueiro 1 / 24

Upload: hoangkhanh

Post on 03-Dec-2018

214 views

Category:

Documents


0 download

TRANSCRIPT

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Crear paquetes en R

Oscar Perpiñán Lamigueirohttp://oscarperpinan.github.io

1 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Definiciones previas (Creating R Packages: atutorial)

I Package: An extension of the R base system withcode, data and documentation in standardizedformat.

I Library: A directory containing installed packages.I Repository: A website providing packages for

installation.

2 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Definiciones previas (Creating R Packages: atutorial)

I Source: The original version of a package withhuman-readable text and code.

I Binary: A compiled version of a package withcomputer-readable text and code, may work only ona specific platform.

3 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Definiciones previas (Creating R Packages: atutorial)

I Base packages: Part of the R source tree, maintainedby R Core.

I Recommended packages: Part of every Rinstallation, but not necessarily maintained by RCore.

I Contributed packages: All the rest.

4 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

¿Por qué crear y publicar un paquete para R?I Es una herramienta cómoda para mantener

colecciones coherentes de funciones y datos.I Permite publicar código de forma que pueda ser

empleado por otros siguiendo unas estructurascomunes.

I La estructura de un paquete obliga a organizar,limpiar y documentar el código.

I Al distribuir las herramientas para que otros puedanusarlas, se obtiene realimentación sobre lo publicado,de forma que se aumenta su robustez, se amplian susfuncionalidades y se conecta con otras herramientasy proyectos.

I «As we enjoy great advantages from the inventionsof others, we should be glad of an opportunity toserve others by any invention of ours, and this weshould do freely and generously.»

5 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Algunos consejos genéricos

Extraído de Best Practices for Scientific Computing

I Write programs for people, not computers.I Automate repetitive tasksI Use the computer to record historyI Make incremental changesI Use version controlI Don’t repeat yourself (or others)I Plan for mistakesI Optimize software only after it works correctlyI Document design and purpose, not mechanicsI Collaborate

6 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Referencias

I Writing R ExtensionsI Creating R Packages: a tutorialI R package primerI Making an R package

7 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Estructura

I Las fuentes de un paquete de R están contenidas enun directorio que contiene al menos:I Los ficheros DESCRIPTION y NAMESPACEI Los subdirectorios:

I R: código en ficheros .RI man: páginas de ayuda de las funciones, métodos y

clases contenidos en el paquete.

I Esta estructura puede ser generada conpackage.skeleton.

8 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

DESCRIPTION

I El fichero DESCRIPTION contiene la informaciónbásica:

Package: pkgnameVersion: 0.5-1Date: 2004-01-01Title: My First Collection of FunctionsAuthors@R: c(person("Joe", "Developer", role = c("aut", "cre"),

email = "[email protected]"),person("Pat", "Developer", role = "aut"),person("A.", "User", role = "ctb",

email = "[email protected]"))Author: Joe Developer and Pat Developer, with contributions from A. UserMaintainer: Joe Developer <[email protected]>Depends: R (>= 1.8.0), nlmeSuggests: MASSDescription: 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

I Los campos Package, Version, License, Title,Author y Maintainer son obligatorios.

I Si usa métodos S4 debe incluir Depends: methods

9 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

NAMESPACE

I R usa un sistema de gestión de espacio de nombres quepermite al autor del paquete especificar:I las variables del paquete que se exportan (y son, por

tanto, accesibles a los usuarios)I las variables que se importan de otros paquetes.I las clases y métodos S3 y S4 que deben registrarse.

I Este mecanismo queda definido en el contenido delfichero NAMESPACE.

10 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

NAMESPACE

El NAMESPACE controla la estrategia de búsqueda devariables que utilizan las funciones del paquete:I En primer lugar busca entre las creadas localmente

(por el código de la carpeta R/).I En segundo lugar busca entre las variables

importadas explícitamente de otros paquetes.I En tercer lugar busca en el NAMESPACE del paquete

base.I Por último busca siguiendo el camino habitual (ver

el resultado de search())

11 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

NAMESPACE

I Para exportar las variables f y g:

export(f, g)

I Para importar todas las variables del paquetepkgExt:

import(pkgExt)

I Para importar las variables var1 y var2 del paquetepkgExt:

importFrom(pkgExt, var1, var2)

12 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

NAMESPACEI Para registrar el método S3 print para la clase

myClass:

S3method(print, myClass)

I Para usar clases y métodos S4

import("methods")

I Para registrar las clases S4 class1 y class2:

exportClasses(class1, class2)

I Para registrar los métodos S4 method1 y method2:

exportMethods(method1, method2)

I Para importar métodos y clases S4 de otro paquete:

importClassesFrom(package, ...)

importMethodsFrom(package, ...)

13 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Documentación

I Las páginas de ayuda de los objetos R se escribenusando el formato “R documentation” (Rd), unlenguaje similar a LATEX.

I Es aconsejable seguir estas orientaciones: Guidelinesfor Rd files

I Para generar el esqueleto de un fichero Rd esaconsejable usar:I prompt: genéricaI promptClass y promptMethods: clases y métodos.I promptPackage: paqueteI promptData: datos

I Todos los comandos disponibles están en eldocumento Parsing Rd files.

14 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

\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 datasave(list = ls(), file= "all.RData")

## restore the saved values to the current environmentload("all.RData")

## restore the saved values to the workspaceload("all.RData", .GlobalEnv)

}\keyword{file}

15 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Ejemplos

I Paquete simple:https://github.com/oscarperpinan/pkgEx

I Paquete con métodos S4:https://github.com/oscarperpinan/pkgMethods

16 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Itinerario

I ComprobarR CMD check myPackage/

I ConstruirR CMD build myPackage/

I Publicar (o actualizar) en un repositorio

17 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Comprobar

I Comprobar un directorio (desde línea de comandos):R CMD check myPackage/

I Comprobar un paquete ya construido (desde líneade comandos):

R CMD check myPackage.tar.gz

I Esta comprobación incluye más de 20 puntos deprueba detallados en el manual Writing R extensions.

18 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Construir

Fuente o binarioSe puede construir un fichero fuente en formato tarball(independiente de la plataforma, habitual en sistemasUnix) o en forma binaria (dependiente de la plataforma,habitual para Windows y Mac).

I Fuente en formato tarball: el resultado es un ficherotarball myPackage.tar.gz que se puede distribuir acualquier sistema.

R CMD build myPackage/

I Comprimido binario: el resultado es una copiacomprimida de la versión instalada del paquete:depende del sistema operativo.

R CMD INSTALL --build myPackage/

19 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Comprobar y construir en sistemas Windows

I Para paquetes sin código compilado (C, Fortran),también se puede usar R CMD check y R CMD build

en un sistema Windows.I Para generar un binario hay que usar R CMD INSTALL

--build.I Es posible que haya que modificar la variables de

entorno TEMP y TMP de forma que sólo contengancaracteres ASCII.

I Para paquetes con código compilado, o en caso deproblemas con los comandos anteriores, hay queusar Rtools.

I Se pueden instalar fuentes tarball con (ver Rinstallation and administration):

install.packages(myPackage.tar.gz, type='source')

20 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Repositorios: CRAN

El principal repositorio de paquetes estables es CRAN.I Publicar en este repositorio conlleva la aceptación de

unas condiciones.I Para publicar en CRAN hay que subir el fichero

fuente tarball resultado de R CMD build mediante elformulario webhttps://cran.r-project.org/submit.html

siguiendo los pasos que allí se indican.I Es imprescindible haber comprobado el fichero con R

CMD check --as-cran antes de subirlo al formulario.El resultado de esta comprobación no debe contenererrores, advertencias o notas.

I Más detalle en el apartado Submission de lascondiciones de CRAN.

21 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Repositorios

Otros repositorios destacables son:

I GitHub (versiones de desarrollo)I R-Forge (versiones de desarrollo)I RForge (versiones de desarrollo)I Bioconductor (paquetes de bioinformática)

22 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Repositorios: GitHub

I GitHub es actualmente el repositorio de código másimportante por número de usuarios y proyectosalojados.I Documentación: Guías sobre GitHub.I Existe una aplicación de escritorio (guía

introductoria)I Emplea git para realizar control de versiones.

I Recursos para aprender a usar git.

I Proyectos de R en GitHub.I Instalar paquete desde GitHub:

install.packages('remotes') ## solo primera vez

library(remotes)

## https://github.com/oscarperpinan/tdr

install_github("oscarperpinan/tdr")

23 / 24

Crear paquetes enR

Oscar PerpiñánLamigueirohttp://

oscarperpinan.github.io

Introducción

Crear un paqueteen R

Publicar unpaquete

Ejemplos

I Paquete simple:https://github.com/oscarperpinan/pkgEx

I Paquete con métodos S4:https://github.com/oscarperpinan/pkgMethods

24 / 24