Importare due funzioni con lo stesso nome usando roxygen2

Sono un manutentore di un pacchetto CRAN e ricevo i seguenti messaggi durante il caricamento:

* 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' 

Perché uso il plotrix e ridimensiona i pacchetti così come i pacchetti NLP e ggplot. Hanno le funzioni di rescale e annotate in comune. Ciò si traduce in un avvertimento significativo con l’ultimo controllo CRAN. Quindi decido di “aggiustarlo”.

Ho fatto la descrizione qualcosa del genere:

 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 

E ha aggiunto questo ad alcuni file .R:

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

Ma questo si traduce in un altro avvertimento:

     * 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' 

    Come posso usare correttamente il tag importFrom ?

    Ho letto: https://github.com/hadley/devtools/wiki/Namespaces

    Ma imparo meglio da un esempio in cui qualcuno doveva farlo. Non sono sicuro di come formattare correttamente il file DESCRIPTION e l’uso dei tag roxygen2 per evitare:

     * 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' 

    Ecco il qdap GitHub Repo

    La cosa da tenere a mente è che non è ansible avere più di una funzione con lo stesso nome nello spazio dei nomi del pacchetto.

    Supponiamo che ci siano due pacchetti, pkgA e pkgB, che entrambi esportano una funzione chiamata foo. Se crei un pacchetto, pkgC, che ha import(pkgA) e import(pkgB) nel NAMESPACE. Ora, quando chiami la library(pkgC) riceverai un avvertimento:

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

    Ora, supponiamo che qualcuno crei un altro pacchetto, pkgD, che ha questo nel file NAMESPACE:

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

    Quindi, library(pkgD ) fornirà 2 avvisi:

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

    Se tutti adottano la pratica di importare interi spazi dei nomi, tra 30 anni, ci saranno molti avvertimenti.

    Invece, dal momento che puoi avere un solo “pippo” nel tuo pacchetto, devi importare esplicitamente il “pippo” (e altre funzioni) che vuoi che il tuo pacchetto usi. Nell’esempio precedente, dovrebbe essere NAMESPACE per pkgD

     importFrom(pkgB,foo) 

    Se hai effettivamente bisogno di usare le due funzioni con lo stesso nome da due pacchetti diversi, un trucco che puoi eseguire è importare altre funzioni da ogni pacchetto per assicurarti che i pacchetti siano installati e che i loro spazi dei nomi siano caricati, ma poi fai riferimento alle funzioni che hai hai bisogno di usare :: notation inserendolo nel tuo NAMESPACE:

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

    e quindi chiamando le funzioni pkgA::abc() e pkgB::abc() nel codice.

    Molto probabilmente non ti sarà più utile, ma forse per gli altri: la risposta alla tua domanda può essere trovata nel sito web che citi, in particolare, qui (citando dalla fonte): “Non importa quante volte usi @importFrom foo bar” .

    Quindi l’uso corretto del tag di roxygen2 @importFrom è: @importFrom nome_pacchetto nome_funzione. Nessuna virgola, parentesi, niente, solo i due nomi separati da uno spazio (eventualmente applicabile a più di 1 funzione, in modo ovvio).

    L’ho provato io stesso proprio ora, quando ho generato la documentazione per la nuova versione di uno dei miei pacchetti, quindi dovrebbe funzionare.

    Spero possa essere d’aiuto.