Importación de dos funciones con el mismo nombre usando roxygen2

Soy un mantenedor de un paquete CRAN y recibo los siguientes mensajes al cargar:

* checking whether package 'qdap' can be installed ... [10s/10s] WARNING Found the following significant warnings: Warning: replacing previous import 'annotate' when loading 'NLP' Warning: replacing previous import 'rescale' when loading 'scales' 

Porque uso el plotrix y escalo los paquetes, así como también los paquetes NLP y ggplot. Tienen las funciones de rescale y annotate en común. Esto da como resultado una advertencia significativa con el último cheque CRAN. Entonces decido “arreglarlo”.

Hice la descripción algo como esto:

 Package: qdap Type: Package Title: Bridging the gap between qualitative data and quantitative analysis Version: 1.0.0 Date: 2013-06-26 Author: Tyler Rinker Maintainer: Tyler Rinker  Depends: R (>= 3.0.0), ggplot2 (>= 0.9.3.1), gdata, grid, Imports: NLP, openNLP, plotrix, scales, LazyData: TRUE Description: Stuff License: GPL-2 

Y agregué esto a algunos archivos .R:

 #' @import ggplot2 gridExtra RColorBrewer #' @importFrom scales alpha 

Pero esto resulta en otra advertencia:

 * installing *source* package 'qdap' ... ** R ** data *** moving datasets to lazyload DB ** inst ** preparing package for lazy loading Warning: replacing previous import 'rescale' when loading 'scales' Warning: replacing previous import 'annotate' when loading 'NLP' Warning: replacing previous import 'alpha' when loading 'scales' 

¿Cómo uso la etiqueta importFrom correctamente?

He leído: https://github.com/hadley/devtools/wiki/Namespaces

Pero aprendo mejor de un ejemplo donde alguien tuvo que hacer esto. No estoy seguro de cómo formatear correctamente el archivo DESCRIPTION, así como el uso de tags roxygen2 para evitar:

 * checking whether package 'qdap' can be installed ... [10s/10s] WARNING Found the following significant warnings: Warning: replacing previous import 'annotate' when loading 'NLP' Warning: replacing previous import 'rescale' when loading 'scales' 

Aquí está el qdap GitHub Repo

Lo que hay que tener en cuenta es que no puede tener más de una función con el mismo nombre en el espacio de nombres de su paquete.

Supongamos que hay dos paquetes, pkgA y pkgB, que exportan una función llamada foo. Si crea un paquete, pkgC, que tenga import(pkgA) e import(pkgB) en NAMESPACE. Ahora, cuando llamas a la library(pkgC) , recibirás una advertencia:

 replacing previous import 'foo' when loading 'pkgB'. 

Ahora, supongamos que alguien crea otro paquete, pkgD, que tiene esto en el archivo NAMESPACE:

 import(pkgA) import(pkgB) import(pkgC) 

Entonces, la library(pkgD ) dará 2 advertencias:

 1: replacing previous import 'foo' when loading 'pkgB' 2: replacing previous import 'foo' when loading 'pkgB' 

Si todos adoptan la práctica de importar espacios de nombres completos, dentro de 30 años a partir de ahora, habrá muchas de estas advertencias.

En cambio, dado que solo puede tener un solo “foo” en su paquete, debe importar explícitamente el “foo” (y otras funciones) que desea que use su paquete. En el ejemplo anterior, el NAMESPACE para pkgD debe ser

 importFrom(pkgB,foo) 

Si realmente necesita utilizar las dos funciones con el mismo nombre de dos paquetes diferentes, un truco que puede realizar es importar otras funciones de cada paquete para asegurarse de que los paquetes estén instalados y sus espacios de nombres cargados, pero luego consulte las funciones que necesita usar :: notación colocando esto en su NAMESPACE:

 importFrom(pkgA,foo) importFrom(pkgB,bar) 

y luego llamar a las funciones pkgA::abc() y pkgB::abc() en su código.

Lo más probable es que ya no le sirva a usted, pero tal vez a otros: la respuesta a su pregunta se puede encontrar en el sitio web que menciona, en particular, aquí (citando de la fuente): “No importa cuántas veces use @importFrom foo bar” .

Entonces, el uso correcto de la etiqueta @importFrom de roxygen2 es: @importFrom package_name function_name. Sin comas, paréntesis, nada, solo los dos nombres separados por un espacio (posiblemente aplicable a más de 1 función, de la manera obvia).

Lo he intentado yo mismo al generar la documentación para la nueva versión de uno de mis paquetes, por lo que debería funcionar.

Espero que ayude.