Gli argomenti a favore dell'utilizzo di package::function
Lo rende del tutto chiaro dove la funzione è venuto da.
Gli argomenti a favore dell'utilizzo di @importFrom package function
Si tratta di meno di battitura, in particolare quando una funzione viene utilizzata molte volte da vostro pacchetto.
Poiché è necessario cercare il pacchetto e una chiamata alla funzione ::
, package::function
ha una piccola penalità di prestazioni in fase di esecuzione. Vedi https://stackoverflow.com/a/7283511/134830.
A conti fatti, qual è il verdetto?
Entrambi i metodi fanno il lavoro e gli argomenti in entrambi i casi non sono schiaccianti, quindi non perdere il sonno. Basta scegliere un metodo e attenersi ad esso.
La politica che è stata adottata nel mio luogo di lavoro è che per alcuni pacchetti comunemente utilizzati, i tag di roulette @importFrom
devono essere utilizzati. Ad esempio, gli sviluppatori devono sapere che ddply
proviene da plyr
o che le funzioni che iniziano con str_
provengono da stringr
. In questo caso, la parentela esplicita della funzione non è così utile da sapere. Per le funzioni al di fuori di questo elenco principale (o se c'è qualche ambiguità), è necessario utilizzare ::
per rendere chiaro da dove proviene.
fonte
2014-07-09 10:26:03
I due punti doppi possono fare riferimento solo alle funzioni esportate. Devi usare il triplo punto altrimenti. – James
@James Vero, ma non dovresti accedere alle funzioni non esportate dai pacchetti di altre persone, poiché l'API potrebbe modificare e infrangere il tuo codice. –
Capricciosamente: penso che 'importFrom' importa la funzione quando si carica il pacchetto, ma' :: 'esegue una ricerca in fase di esecuzione, quindi' importFrom' renderà il caricamento più lungo del pacchetto, ma '::' renderà il vostro il codice funziona più lentamente. Sospetto che sia solo la differenza di microsecondi in ogni caso. –