example - Importando dos funciones con el mismo nombre usando roxygen2
roxygen2 documentation data (2)
Lo más probable es que ya no le sea útil a usted, sino a otros: la respuesta a su pregunta se puede encontrar en el sitio web que menciona, en particular aquí (cita de la fuente): "No importa cuántas veces use @importFrom bar" .
Entonces, el uso correcto de la etiqueta de roxygen2 @importFrom 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 manera obvia).
Lo he intentado yo mismo ahora 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.
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 los paquetes plotrix y scale, así como los paquetes NLP y ggplot. Tienen las funciones de rescale
y annotate
en común. Esto resulta en una advertencia significativa con la última verificación de CRAN. Así que 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 <[email protected]>
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 agregó 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 correctamente la etiqueta importFrom
?
He leído: https://github.com/hadley/devtools/wiki/Namespaces
Pero aprendo mejor de un ejemplo donde alguien tenía que hacer esto. No estoy seguro de cómo formatear correctamente el archivo de DESCRIPCIÓN, así como el uso de etiquetas 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 ambos exportan una función llamada foo. Si creas un paquete, pkgC, que tiene import(pkgA)
e import(pkgB)
en NAMESPACE. Ahora, cuando llames a library(pkgC)
obtendrá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, habrá muchas de estas advertencias.
En su lugar, como 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, NAMESPACE para pkgD debe ser
importFrom(pkgB,foo)
Si realmente necesita usar 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 estén cargados, pero luego consulte las funciones que necesita usar ::
notación colocando esto en su ESPACIO DE NOMBRE:
importFrom(pkgA,foo)
importFrom(pkgB,bar)
y luego llamar a las funciones pkgA::abc()
y pkgB::abc()
en su código.