2010-07-13 19 views
10

Quando ho caricato pacchetto debug eseguire il debug di uno script con zoo oggetti, ho avuto problemi: la funzione index da zoo preso mascherate da debug pacchetto. Come posso smascherare index? In generale, come affrontare questi problemi di collisione di nome? Semplicemente non usiamo il pacchetto debug con `zoo '?Come smascherare una funzione in R

risposta

10

simboli esportati sono sempre identificabile con la :: dell'operatore:

zoo::index 

funzioni nascoste non dichiarate nel namespace possono ancora essere accessibili usando ::: (tripla-due punti), e con l'esempio sarebbe

zoo:::.onLoad 

che puoi vedere anche se non viene esportato.

+1

D'altra parte questo è il motivo per cui l'impostazione del sistema <-function() {} non rende magicamente R sicuro. – mbq

+0

grazie. Posso impostare in modo temporaneo l'indice <-zoo :: index per ovviare a questo problema senza modificare il mio script originale. Sembra che alcuni pacchetti non funzionino insieme. – ahala

4

È solo mascherato ma non è mascherato allo zoo, quindi quando una funzione dello zoo tenta di utilizzare l'indice, troverà sempre il proprio indice.

zoo ha anche un metodo time.zoo quindi se z è un oggetto zoo è possibile utilizzare il tempo (z) al posto dell'indice (z).

Infine puoi sempre fare riferimento a zoo :: index per assicurarti di ottenere quello in zoo.

+0

grazie. time.zoo funzionerà ma non voglio modificare il mio script originale. E l'indice (zooobject) riporta un errore nel mio caso. Apperentemente R non sa che index.zoo dovrebbe essere chiamato su zooobject. – ahala

+0

Se si carica lo zoo dopo aver caricato debug/mvbutils piuttosto che il contrario, l'indice in zoo sarà quello che si ottiene per impostazione predefinita anziché quello in debug/mvbutils. –

10

È possibile scaricare il pacchetto con funzioni mascherate e ricaricarlo. E riacquisterà la precedenza nella SearchPath:

unloadNamespace("zoo") 
library("zoo") 

In futuro, se si vuole caricare un pacchetto mentre impedendole di mascherare le altre funzioni, è possibile specificare la sua posizione nel percorso di ricerca, con un numero arbitrario di grandi dimensioni:

library("debug", pos = .Machine$integer.max) 
Problemi correlati