2012-05-11 15 views
10

Ho sempre pensato che avere un pacchetto nel campo "Depends" avrebbe automaticamente anche importare lo spazio dei nomi. Tuttavia, sembra che in R 2.15 le dipendenze non siano disponibili finché il pacchetto non è collegato al percorso di ricerca. È questo comportamento previsto?Problemi di dipendenza del pacchetto R quando il namespace non è collegato

Il problema si presenta come segue: Supponiamo che ci sia un pacchetto di 'bambino', che Dipende, ma non in modo esplicito Importa un pacchetto chiamato 'padre' e contiene una funzione che chiama a un oggetto nello spazio dei nomi di 'Genitore'. Quindi, quando viene chiamata questa funzione senza effettivamente allegare "Bambino", non è possibile trovare la funzione in "Parent".

Qui un esempio dal manuale del pacchetto bigdata, ma il problema è molto diffuso:

x = matrix(rnorm(50*80),50,80) 
beta = c(3,2,1.5,rep(0,77)) 
y = rnorm(50) + x%*%beta 
z1 = bigdata::lasso.stars(x,y) 

L'esempio non riesce perché lasso.stars dipende 'glmnet' che non è caricato fino bigdata copia. L'unico modo per essere in grado di chiamare lasso.stars è quello di collegare in realtà il pacchetto bigdata:

library(bigdata) 
z1 = bigdata::lasso.stars(x,y) 

Ora a complicare ulteriormente le cose, sembra che questo problema è ereditato a qualsiasi pacchetto 'nipote' che Importazioni in questo caso la funzione lasso.stars. Ho difficoltà a trovare un buon esempio, ma sono sicuro che sono là fuori.

È un bug? So che può essere evitato chiedendo agli autori di pacchetti di utilizzare Imports anziché Depends, ma in pratica la maggior parte dei pacchetti su CRAN utilizza ancora Depends. Sembra che il problema sia facilmente evitato se R importasse automaticamente lo spazio dei nomi di qualsiasi pacchetto Depends nello spazio dei nomi del pacchetto figlio.

+0

+1 grande domanda. È uno di quelli che ho pensato di affrontare da solo, ma ho rimandato, pensando che sarebbe stato meglio rilanciare su R-devel (dal momento che penso che i membri del R-core siano gli unici a poter risolvere questo problema). Devono averlo discusso, ma ho cercato rapidamente diverse volte e non ho visto alcuna menzione, che sembra strano ... –

+0

@ Jeroen, potresti fornire l'esempio? Quando provo 'library (xts)', le funzioni di esportazione di 'zoo' vengono caricate automaticamente. – kohske

+0

@kohske l'esempio è nell'argomento. Il pacchetto 'xts' ha un file NAMESPACE in cui importa manualmente le funzioni richieste da' zoo'. Quindi non ha il problema, penso. – Jeroen

risposta

2

Per coloro che sono interessati, la discussione continua here sulla r-devel mailing list:

Problemi correlati