2012-04-25 17 views
23

Bien, primer intento de escribir un paquete R y estoy atascado. He aquí cómo crear el paquete:Al escribir mi propio paquete R, parece que no puedo obtener otros paquetes para importar correctamente

package.skeleton("pkg",code_files=some.filenames) 
roxygenize("okg") 

estoy usando roxygen2 y tienen las siguientes importaciones en mi archivo "PKG-package.R":

@import data.table zoo lubridate 

Desde un terminal, que a continuación, ejecute:

R CMD build pkg 
R CMD check pkg 
R CMD install pkg 

Durante la fase de verificación, consigo las siguientes advertencias:

** preparación de un paquete de carga diferida
Advertencia: la sustitución de importaciones anterior 'horas' al cargar 'lubridate'
Advertencia: la sustitución de importaciones anterior 'mday' al cargar 'lubridate'
Advertencia: la sustitución de importaciones anterior 'mes' durante la carga 'lubridate'
Advertencia: la sustitución de importación anterior 'wday' al cargar 'lubridate'
Advertencia: la sustitución de importaciones anterior 'semana' al cargar 'lubridate'
Advertencia: la sustitución de importación anterior 'yday' al cargar 'lubridate'
Advertencia: reemplazando la importación anterior 'año' al cargar 'lubridat e '
** ayuda
* la instalación de los índices de ayuda
** índices paquete de construcción ...
** prueba si el paquete instalado se puede cargar
mensajes de advertencia:
1: sustitución de importaciones anterior' hora 'al cargar 'lubridate'
2: reemplazar anterior importación 'mday' al cargar 'lubridate'
3: sustitución de importación anterior 'meses' al cargar 'lubridate'
4: sustitución anterior importación 'wday' cuando la carga ing 'lubridate'
5: la sustitución de importaciones anterior 'semana' al cargar 'lubridate'
6: sustitución de importación anterior 'yday' al cargar 'lubridate'
7: sustitución de importaciones anterior 'año' al cargar 'lubridate'

No estoy seguro de qué hacer con eso, pero parecen advertencias típicas de sobreescribir cosas en el espacio de nombres.En cualquier caso, soy capaz de instalar el paquete, pero esto es lo que sucede cuando trato de usarlo:

biblioteca (PKG)
Anulación + y - métodos de POSIXt, fecha y difftime
Los mensajes de advertencia:
1: reemplazar anterior importación 'horas' al cargar 'lubridate'
2: reemplazar anterior importación 'mday' al cargar 'lubridate'
3: sustitución de importación anterior 'meses' al cargar 'lubridate'
4: la sustitución de importación anterior 'wday' al cargar 'lubridate'
5: la sustitución de importaciones anterior 'semana' al cargar 'lubridate'
6: sustitución de importación anterior 'yday' al cargar 'lubridate'
7: sustitución de importaciones anterior 'año 'al cargar 'lubridate'
d < - my.function (arg1, arg2)
error en el partido (x, x): no se pudo encontrar la función "PARTIDO"

El uso de rastreo(), Descubrí que esto está generando duri ng una llamada a merge.zoo(). Así que traté de cargar el zoo a mano durante mi sesión R y listo, entonces la función funciona correctamente sin el mensaje de error.

He intentado cambiar el orden de las importaciones manualmente en el archivo "pkg-package.R", así como en NAMESPACE. Sin embargo, en base a algo que encontré en otro lugar, no he agregado ninguna Importación ni Depende de DESCRIPCIÓN. ¿Ayuda?

+1

Recomiendo poner estos paquetes en su 'Depende' en la' DESCRIPTION'. –

+1

'Imports', creo que – baptiste

Respuesta

25

Las advertencias se deben a que data.table y lubridate definen un símbolo hour, etc. ver data.table::hour y lubridate::hour. Puede evitar esto importando solo las funciones de lubridate/data.table que desee, en lugar de todo el paquete; un archivo NAMESPACE estándar contendría

importFrom(lubridate, hour) 

por ejemplo. En roxygen2 que usaría la etiqueta:

@importFrom lubridate hour 

El problema partido es probablemente porque merge está enviando de forma incorrecta, probablemente porque zoológico deberá tener en su espacio de nombres en lugar de S3method(merge, zoo)export(merge.zoo), como se describe en la escritura de I Extensiones, 1.6.2 . La solución aquí es contactar al mantenedor de zoo, packageDescription('zoo')$Maintainer (el mantenedor es lo suficientemente versado en R que siento que me diagnosticaron mal ...).

+0

Esta es una respuesta útil, pero solo un seguimiento. Entonces, si solo importo una sola función como "hora", ¿también necesito importar todas sus funciones internas o potencialmente privadas también? ¿O importará 'importFrom' importar funciones privadas o dependencias internas? – krishnab

+2

Las funciones @krishnab buscan los símbolos que usan primero en su propio entorno, luego en el entorno en el que se definió la función, de modo que las funciones de data.table que use data.table :: hour se encontrarán automáticamente. –

+2

¿Qué sucede cuando necesita usar importar para múltiples paquetes para tener acceso a clases de objetos específicos y tienen conflictos de nombres? Estoy topando con esto con spatstat y raster (área, rotar, cambiar). No puedo usar importFrom porque estoy usando numerosas funciones de ambos y necesito las clases de paquete. ¿Hay alguna manera de enmascarar las tres funciones de ráster que entran en conflicto con spatstat? Debo señalar que el uso de depends en DESCRIPTION no funciona. –

1

Como una solución temporal para el error MATCH, he tenido éxito al enumerar el paquete zoo en la sección Depends: del archivo DESCRIPTION del paquete.

Cuestiones relacionadas