2010-12-06 20 views
54

¿Cómo aprenden las personas a darle un espacio de nombres a un paquete R? La documentación en "R Extensions" me parece bien, pero realmente no entiendo qué sucede cuando se importa o exporta una variable. Necesito una guía ficticia para estas directivas.Espacios de nombres en paquetes R

¿Cómo se decide qué se exporta? ¿Es solo todo lo que realmente no debería requerir la sintaxis pkg ::: var? ¿Y las importaciones?

¿Las importaciones hacen que sea más fácil garantizar que su uso de otras funciones del paquete no se confunda cuando los nombres de las funciones se superponen?

¿Hay consideraciones especiales para las clases S4?

Los paquetes que conozco que usan espacios de nombres como sp y rgdal son bastante complicados. ¿Hay ejemplos simples que puedan aclarar las cosas?

Respuesta

34

que tienen un comienzo en una respuesta en la devtools wiki: http://adv-r.had.co.nz/Namespaces.html

+0

Amando este wiki a medida que avanza. ¡Gran recurso! – Shane

+0

@hadley Para paquetes que he creado, ahora tengo que agregar un espacio de nombres para 2.14. Este hilo está un poco sobre mi comprensión en este momento. Cuando abro la carpeta de plyr, por ejemplo, veo un documento llamado NAMSPACE. Si tuviera que poner este documento con el mismo formato que tiene para mis funciones en la carpeta de mi paquete, esto sería todo lo que tengo que hacer. –

+1

@TylerRinker Sí, eso es lo esencial. Cree una instrucción 'export (...)' para cada función que desee exportar. si importa paquetes, también deberá agregar una declaración 'import (...)' para cada paquete. Ver también la respuesta por @DirkEddelbuettel en esta página. – Andrie

14

La explicación más clara que he leído está en John Chambers 'Software for Data Analysis: Programming with R, página 103. No conozco ninguna explicación en línea gratuita que sea mejor que la que ya ha encontrado en el manual de Extensiones R.

+0

gracias por eso, me recuerda que aún no lo he leído, aunque estaba emocionado de verlo publicado – mdsumner

+0

la explicación en este libro es realmente detallada, exactamente lo que buscaba – mdsumner

11

También puede elegir un paquete pequeño y fácil y seguirlo.

Miré semi-aleatoriamente digest que es uno de mis paquetes más pequeños. Yo cargo una biblioteca dinámica (pequeña) y exporto un símbolo, la función digest(). Aquí está el contenido del archivo NAMESPACE:

## package has dynamic library 
useDynLib(digest) 

## and one and only one core function 
export(digest) 

Tenga una mirada en el resto de los archivos de origen y tal vez tratar de leer la escritura R Extensiones junto mirar el ejemplo, y hacer algunos experimentos.

+2

Bueno, además de algoritmos de suma de comprobación: ' Me he estado preguntando si hubo un Rc. . . Me refiero a un paquete R para eso;) – mdsumner

+1

Aye. Mirar los archivos de NAMESPACE de los paquetes existentes definitivamente es la forma en que aprendí a hacerlo. – Sharpie

23

Pocos años después aquí ....

Consolidé resultados de las Cámaras, otros mensajes StackOverflow, y mucho de retoques en R: http://obeautifulcode.com/R/How-R-Searches-And-Finds-Stuff/

Esto es menos sobre la implementación de NAMESPACE/IMPORTS/DEPENDS y más sobre el propósito de estas estructuras. Responde algunas de sus preguntas.

+0

Excelente redacción. –

+0

Maravillosamente claro (a diferencia del documento "Writing R Extensions" ...) –