Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Crear Paquetes R PDF
Crear Paquetes R PDF
Francesc Carmona
fcarmona@ub.edu
Departamento de Estadística
Universidad de Barcelona
Marzo 2013
El proceso para escribir paquetes de R se describe con todo detalle en el manual Writing R
extensions (WRE) del R Core Team y que se puede ver en el Comprehensive R Archive
Network (CRAN). Un manual más sencillo es Creating R Packages: A Tutorial de Friedrich
Leisch. Sin embargo, en este documento se pretende concretar y hacer comprensible el
proceso de creación de un paquete de R en el entorno Windows y para usuarios no expertos.
Aunque es posible añadir código en un lenguaje de bajo nivel (como C/C++/Fortran), vamos a
centrarnos únicamente en el empaquetado de código y datos en R.
Aunque se puede crear un paquete únicamente desde la consola de R y la consola del sistema,
es preferible utilizar un programa como RStudio que nos facilitará algunas tareas.
1. En primer lugar, crear un paquete nos obligará a pulir nuestras funciones, datos y
código y, sobre todo, a documentar todo el trabajo y dar ejemplos claros. Las
funciones serán más fáciles de usar y podremos utilizar el comando ? para ver detalles
de los parámetros, los resultados y ejemplos.
2. Es el modo más elegante de compartir su trabajo. Los posibles usuarios del paquete
agradecerán el esfuerzo de mejora y documentación que requiere la creación de un
paquete. El intercambio con los usuarios también favorece la mejora del código.
3. Es la forma establecida para contribuir al crecimiento de R.
1. Un conjunto mínimo de utilidades tipo Unix (las llamadas Rtools) de Brian Ripley y
que ahora mantiene Duncan Murdoch.
2. Algunos compiladores GNU reunidos en MinGW-w64 (necesarios únicamente si su
paquete contiene código C, Fortran o C++). El compilador de Perl ya no es necesario
para nada.
1
3. El compilador de la ayuda HTML de Microsoft.
4. Una versión del procesador de textos TeX (como MiKTeX para Windows).
La obtención de las dos primeras componentes se hace directamente del CRAN. En nuestro
mirror preferido hacemos Download R for Windows y Rtools, para seleccionar el ejecutable
RtoolsXX.exe más actual.
Finalmente, deberemos instalar una versión del procesador TeX si queremos someter el
paquete creado al CRAN. El TeX se utiliza para obtener las versiones LaTeX de la
documentación. La distribución MikTeX (http://www.miktex.org/) de LaTeX en su versión
básica debería ser suficiente para lo que necesitamos. También es posible usar la distribución
TeXLive de http://www.tug.org/texlive/.
2
La variable de entorno PATH
Cuando instalamos las Rtools, opcionalmente, el programa de instalación nos ofrece editar la
variable PATH variable así:
PATH=c:\Rtools\bin;c:\Rtools\gcc-4.6.3\bin;<otros>
Es muy importante que comprobemos que las carpetas son correctas respecto a nuestras
indicaciones anteriores y, sobre todo, que dejemos el PATH en el mismo orden. LaTeX y el
HTML Help Workshop deberían instalarse con los "otros".
Ahora Windows está preparado para localizar estos programas y utilidades. El siguiente punto
fundamental es probarlos. Para ello abriremos una ventana “Indicador de comandos” (las
variables de entorno se inicializan y fijan cada vez que abrimos esta ventana). Escribimos
path y ejecutamos esta instrucción. El resultado es la lista de carpetas de la variable de
entorno PATH. Leámosla con cuidado para observar si falta alguna carpeta o si hay algún
error. Un ejemplo:
C:\Usuarios\fcarmona>path
PATH=c:\Rtools\bin;c:\Rtools\gcc-4.6.3\bin;
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
<otras>
Para cada una, deberíamos obtener una larga lista de opciones. Eso nos indica que los
programas están listos para ser utilizados.
Si alguna instrucción falla, habrá que localizar las carpetas que contienen los ejecutables
(.exe) de estas instrucciones y corregir adecuadamente la variable de entorno PATH. Para ello
haremos clic con el botón derecho del ratón en el icono de “Inicio” del escritorio con la
siguiente secuencia:
3
Figura 2: Ventana de las variables de entorno
Con esto llegaremos a las Propiedades del sistema y en la pestaña Avanzados pulsaremos el
botón Variables de entorno y nos encontraremos con una ventana como la Figura 1.
Hay que tener mucho cuidado en la escritura correcta de los nombres de las carpetas.
Deberemos recordar con exactitud donde hemos instalado cada uno de los programas.
Algunos detalles:
Una vez modificada la variable PATH, debemos comprobar el entorno Windows como ya se
ha explicado para ver si todo funciona correctamente. Si todo está bien, estamos preparados
para construir nuestro paquete.
4
Construcción del paquete
Este paso se puede hacer de forma manual con la función package.skeleton() o como un
proyecto “Paquete” en RStudio. Primero vamos a ver la forma manual y a continuación
explicaremos su equivalente en RStudio.
De forma manual, lo más sencillo es utilizar la función con sus mínimos parámetros de la
siguiente forma:
Otra posibilidad es detallar las funciones y objetos que deben formar nuestro paquete
> package.skeleton(”nombre_paquete”, path=”C:/Carpeta_obj”,
list=c(funcion1, datos1, más))
5
2. Algunas carpetas como
carpeta contenido
R funciones del paquete
man documentación o ayuda
src código en un lenguaje de bajo nivel (opcional)
data bases de datos (opcional)
Ejemplo
Vamos a crear un paquete muy sencillo con dos funciones elementales. Se trata de calcular el
intervalo de confianza y el test para la media con datos normales y varianza conocida. Las
funciones son:
La instrucción que crea el paquete, suponiendo que la carpeta C:/Rpaquetes exista, es:
Ahora podemos examinar el contenido de la carpeta miPaquete y rellenar todos los archivos
necesarios.
Para crear un nuevo paquete con RStudio utilizaremos la instrucción Create Project desde el
menú Project o desde la barra de herramientas. Atención: si estamos trabajando, eso cierra la
sesión y abre una nueva. Es mejor iniciar una sesión y crear el proyecto desde cero.
Debemos seleccionar el Type: Package, dar un nombre al paquete que será también el nombre
del proyecto y el nombre de la carpeta y decirle donde crearlos (carpeta y proyecto). De
entrada nos ofrece crearlos en la carpeta por defecto o “home”. No en la carpeta de trabajo.
Mejor si especificamos la carpeta exacta donde se creará la carpeta del paquete o proyecto.
También hay que añadir el archivo fuente con las funciones y datos que queremos incorporar
al paquete. Así, cuando pulsemos el botón Create Project, se creará toda la estructura de
archivos necesaria dentro de la carpeta especificada y estaremos en disposición de rellenar los
archivos de configuración y documentación del paquete.
6
Figura 3: New Project en RStudio.
7
Paso 2: Edición de los archivos de descripción
Si editamos el archivo DESCRIPTION que hemos creado para nuestro paquete de ejemplo
miPaquete, observaremos que se deben rellenar los campos con los datos concretos:
Package: miPaquete
Type: Package
Title: What the package does (short line)
Version: 1.0
Date: 2007-07-17
Author: Who wrote it
Maintainer: Who to complain to <yourfault@somewhere.net>
Description: More about what it does (maybe more than one line)
License: What license is it under?
Este es el conjunto mínimo de campos. Otros campos son opcionales, pero en todo caso hay
que tener mucho cuidado al rellenarlos ya que este archivo se consulta durante el proceso de
creación del paquete.
Observemos que el nombre del paquete es el mismo que el de la carpeta y el mismo que
utilizaremos en la construcción del paquete.
La fecha al estilo yyyy-mm-dd.
Si algún campo ocupa más de una línea, como el campo Description, la segunda y
siguientes deben empezar por un tabulador o espacio en blanco.
Ejemplo
Package: miPaquete
Type: Package
Title: Test para la media en poblaciones normales con varianza conocida
Version: 1.0
Date: 2013-02-27
Author: Francesc Carmona <fcarmona@ub.edu>
Maintainer: Francesc Carmona <fcarmona@ub.edu>
8
Depends: R (>= 2.15.2)
Description: Este paquete proporciona algunas funciones para calcular el
intervalo de confianza y el test para la media de una variable normal
con varianza conocida.
License: GPL (version 2 or later)
Encoding: latin1
Aunque no es recomendable, hemos añadido el item Encoding para utilizar el idioma propio
(castellano, catalán,...) en los archivos de ayuda. En linux sería Encoding: UTF-8.
Otras posibilidades se pueden ver en el documento de referencia Writing R extensions.
Otro archivo importante es el NAMESPACE. Sirve para cargar los paquetes o librerías que
necesita nuestro paquete y para indicar qué funciones haremos públicas (con ayuda). Nuestro
paquete de ejemplo es tan sencillo que no lo necesita.
Curiosamente, este es uno de los pasos más difíciles, pero irrenunciable. Si nuestra
documentación es confusa, pobre o inexistente, el paquete no se podrá utilizar. ¡Incluso por su
creador o creadora!
La subcarpeta man contiene los archivos de documentación (Rd) de cada uno de los objetos
utilizables del paquete. Para cada función de la carpeta R, debemos crear un archivo de
documentación (con la extensión Rd) en la carpeta man. Es decir, si miFuncion.R es un
archivo de la carpeta R, debemos crear el archivo miFuncion.Rd en la carpeta man.
R utiliza un lenguaje especial para crear estos archivos de documentación “Rd”. La
instalación de R se encargará de trasladar este lenguaje genérico Rd a archivos HTML, de
texto o LaTeX, según se necesite. Este lenguaje de documentación tiene una semejanza
evidente con el LaTeX. En todo caso no es necesario saber LaTeX para escribir la
documentación de nuestro paquete.
Si hemos utilizado la función package.skeleton(), ya tenemos una plantilla “Rd” para cada
función de nuestro paquete. Ahora debemos editar y rellenar la información requerida.
El lenguaje “Rd” consiste en una serie de instrucciones con sus correspondientes argumentos.
Cada instrucción es de la forma:
\command{arg}
Por ejemplo
\title{ este es mi título }
El archivo “Rd” para una función contiene los puntos obligatorios ‘name’, ‘alias’, ‘title’,
‘description’, ‘usage’ en la cabecera y ‘keyword’ en el pié, además de los puntos opcionales
como ‘arguments’, ‘value’, ‘details’, ‘references’, ‘seealso’, ‘examples’ en el cuerpo del
archivo.
Además de los puntos obligatorios, se recomienda añadir las secciones ‘arguments’, ‘value’,
‘author’ y ‘examples’. Luego un archivo “Rd” típico tiene un mínimo de 10 secciones, cada
una de las cuales empieza por su correspondiente instrucción:
9
\name{ ... }
\alias{ ... }
\title{ ... }
\description{ ... }
\usage{ ... }
\arguments{ ... }
\value{ ... }
\author{ ... }
\examples{ ... }
\keyword{ ... }
En todo caso la recomendación es empezar con un mínimo de puntos y añadir los que
deseemos después de depurar de errores el archivo.
\name{z.test}
\alias{z.test}
%- Also NEED an '\alias' for EACH other topic documented here.
\title{ ~~function to do ... ~~ }
\description{
~~ A concise (1-5 lines) description of what the function does. ~~
}
\usage{
z.test(x, mu = 0, sigma = 1)
}
%- maybe also 'usage' for other objects documented here.
\arguments{
\item{x}{ ~~Describe \code{x} here~~ }
\item{mu}{ ~~Describe \code{mu} here~~ }
\item{sigma}{ ~~Describe \code{sigma} here~~ }
}
\details{
~~ If necessary, more details than the description above ~~
}
\value{
~Describe the value returned
If it is a LIST, use
\item{comp1 }{Description of 'comp1'}
\item{comp2 }{Description of 'comp2'}
...
}
\references{ ~put references to the literature/web site here ~ }
\author{ ~~who you are~~ }
\note{ ~~further notes~~
10
n <- length(x)
SE <- sigma/sqrt(n)
z <- (mean(x)-mu)/SE
p.value <- (1-pnorm(abs(z)))*2
return(list(media=mean(x), z=z, p.valor=p.value))
}
}
% Add one or more standard keywords, see file 'KEYWORDS' in the
% R documentation directory.
\keyword{ ~kwd1 }
\keyword{ ~kwd2 }% __ONLY ONE__ keyword per line
Con el \alias{} se puede utilizar el mismo documento de ayuda para varios objetos. Es el
caso de las funciones “dnorm”, “rnorm”, “pnorm” y “qnorm”.
Los ejemplos deben ser ejecutables. R comprobará durante la instalación que los ejemplos
funcionan.
El último item \keyword{} debe contener como mínimo una de las palabras clave estándar
que se pueden hallar en el archivo R_HOME/doc/KEYWORDS.db1.
Las páginas de ayuda para conjuntos de datos siguen una estructura similar y contienen los
items ‘name’, ‘alias’, ‘doctype’, ‘title’, ‘description’, ‘usage’, ‘format’, ‘source’, ‘examples’ y
‘keyword’, donde ‘doctype’ viene definido como {data} y ‘keyword’ como {datasets}.
Hay un extenso conjunto de instrucciones para dar formato. Todas ellas están descritas en el
capítulo 2 de WRE. Mi recomendación es no abusar de ellas y, a medida que se tome
confianza, leer el capítulo mencionado y probarlas.
Para utilizar la fuente “typewriter” (especialmente para código R): \code{ miFuncion }
Insertar URL: \url{ http://www.r-project.org/ }
Insertar una dirección de correo: \email{ fcarmona@ub.edu }
La instrucción \arguments usa la subinstrucción \item para organizar una lista. Si el retorno
de la función es una lista, también se necesitará usar la instrucción \item. Por ejemplo, la
función z.test de nuestro paquete devuelve una lista con tres items. Esto significa que en la
sección \value deberemos insertar:
11
NOTA: no debe haber espacios entre la llave } que cierra el nombre del item y la llave que
abre { el texto del argumento.
Los mensajes de error de R para los archivos de documentación pueden ser muy crípticos. Por
ello es conveniente tener mucho cuidado en los detalles de su redacción.
No es una buena idea ejecutar la instrucción R CMD check para chequear los archivos “Rd” al
principio. Es mejor usar R CMD Rd2txt primero. Si tenemos un archivo de documentación,
mifun.Rd, se puede utilizar la siguiente instrucción en la consola:
que producirá la versión html. Entonces se puede abrir el archivo creado con su navegador
preferido. Inspeccione el resultado para ver si todas las secciones definidas se muestran
correctamente.
12
\author{Francesc Carmona} funcionará, pero \author {Francesc Carmona} no.
Si queremos añadir objetos, como un conjunto de datos o una nueva función, a una estructura
de paquete ya creada, deberemos gravar los objetos mismos y sus archivos de documentación
en las carpetas apropiadas.
Gravar un conjunto de datos se puede hacer con la instrucción save(). Los nombres de los
objetos a gravar se ponen como primer argumento. En el argumento “file” se debe especificar
la carpeta donde dejaremos los objetos. Por ejemplo, si queremos añadir un data.frame
“datos”, se gravará como “Rda” con la instrucción
El código R se debe gravar con la función dump(). Por ejemplo, para gravar una función de
nombre “nuevo.test” hacemos
En teoría, este paso es sencillo. Abra una ventana de instrucciones o consola y vaya hasta la
carpeta en la que empieza el árbol de carpetas de su paquete.
Use R CMD check para “chequear” su paquete.
R CMD check prueba directamente en la consola una serie de instrucciones que crearan los
archivos de documentación en los formatos texto, LaTeX y HTML, compilará el código
fuente y creará los DLL, chequeará las inconsistencias y varios errores, ejecutará los ejemplos
y finalmente construirá un manual en formato DVI.
La mejor forma de evitar los errores en este punto es revisar antes todo su código con mucho
ojo:
Si se tienen en cuenta estos detalles previos, los errores detectados por R CMD check se verán
gratamente limitados.
13
R CMD check construirá el paquete en una carpeta de nombre miPaquete.Rdcheck que se
creará en la misma carpeta donde la instrucción se invoca.
Finalmente, confirme que el tiempo de ejecución de los ejemplos es inferior a 2 minutos. Esto
se puede ver en el archivo miPaquete-Ex.Rout en la carpeta “Rdcheck”.
En RStudio también es posible chequear cada archivo Rd de forma individual ya que dispone
de un botón para ver el resultado en HTML. Por otra parte también se puede ejecutar
directamente en la consola de R la instrucción
Use la instrucción R CMD build miPaquete para construir definitivamente el paquete. Esta
creará un archivo “tar” que se puede someter al CRAN o distribuir entre los colegas. En su
propio ordenador, que ya dispone de las herramientas necesarias, se puede usar la instrucción
R CMD INSTALL miPaquete para instalar su paquete en la localización habitual de todos los
paquetes del programa R. A continuación se podrá cargar en una sesión con la instrucción:
> library(miPaquete)
2 En una instalación inicial con MikTeX se produjo un error inesperado con la fuente “inconsolata”. Ver la
solución al final de este documento.
14
Paso 5 con RStudio
Con el icono More de la Figura 5 se despliega un menú que permite crear el paquete en la
versión “tar” con la opción Build Source Package.
El archivo “tar” que contiene el paquete se puede instalar gracias a las herramientas de que
dispone nuestro ordenador (Rtools, ...). En un ordenador Linux seguramente estas
herramientas se incluyen de forma natural y la instalación del paquete no tendrá ninguna
dificultad. Sin embargo, para instalar nuestro paquete en otro ordenador Windows será mejor
convertirlo al formato “zip” y entonces se podrá instalar desde el menú:
Para obtener el arhivo “zip” del paquete bastará con comprimir en este formato el paquete
“Windows” que ya está instalado en nuestro ordenador en la carpeta R_HOME/library. Al
nombre del archivo le podemos añadir el número de versión: miPaquete-1.0.zip.
http://win-builder.r-project.org/upload.aspx
Con el icono More de la Figura 5 se despliega un menú que permite crear el paquete en la
versión “zip” en Windows con la opción Build Binary Package.
15
se ha explicado, R se encarga de chequear el código R (no la literatura) de los archivos
Sweave.
Con una instalación inicial de MikTeX, al chequear por primera vez un paquete se produce un
error ya que no está instalado el paquete “inconsolata”. Con el MikTeX Package Manager se
puede instalar fácilmente. Sin embargo, el problema persiste hasta que se ejecuta la siguiente
instrucción en el “Indicador de comandos”:
initexmf --mkmaps
Bibliografía
16