2012-05-11 5 views
10

Ich habe immer angenommen, dass ein Paket im Feld 'Hängt' automatisch den Namespace importieren würde. Es scheint jedoch, dass in R 2.15 Abhängigkeiten erst verfügbar werden, wenn das Paket tatsächlich an den Suchpfad angehängt ist. Ist das beabsichtigtes Verhalten?R-Paket Abhängigkeitsprobleme, wenn Namespace nicht angefügt ist

Das Problem sieht wie folgt aus: Angenommen, es ist ein Paket ‚Child‘, die Hängen, aber nicht explizit Import ein Paket namens ‚Eltern‘ und enthält eine Funktion, die im Namensraum zu einem Objekt ruft aus 'Elternteil'. Wenn diese Funktion dann aufgerufen wird, ohne "Child" anzuhängen, wird die Funktion in "Parent" nicht gefunden.

Hier ein Beispiel aus dem Handbuch des bigdata Pakets, aber das Problem ist sehr verbreitet:

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) 

Das Beispiel schlägt fehl, weil lasso.stars auf ‚glmnet‘ abhängt, die nicht geladen wird, bis bigdata angebracht ist. Der einzige Weg, der Lage zu sein, lasso.stars zu nennen, ist tatsächlich die bigdata Paket anhängen:

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

nun weiter die Dinge zu komplizieren, wie es scheint, dass dieses Problem zu einer ‚Enkel‘ Paket geerbt ist, dass Imports in diesem Fall die Funktion lasso.stars. Es fällt mir schwer, ein gutes Beispiel zu finden, aber ich bin mir sicher, dass sie da draußen sind.

Ist das ein Fehler? Ich weiß, dass dies vermieden werden kann, indem Paketautoren aufgefordert werden, Import statt Depends zu verwenden, aber in der Praxis verwenden die meisten Pakete auf CRAN immer noch Depends. Es scheint, als würde das Problem leicht vermieden, wenn R automatisch den Namespace von Depends-Paketen in den Child-Paket-Namespace importiert.

+0

+1 Große Frage. Es ist einer, an den ich gedacht habe, mich selbst anzuschneiden, aber ich habe es verschoben, weil ich denke, dass es besser auf R-devel ist (da ich denke, dass die R-Kern-Mitglieder die einzigen sind, die das lösen können). Sie müssen es besprochen haben, aber ich habe schnell mehrere Male gesucht und habe keine Erwähnung davon gesehen, was merkwürdig erscheint ... –

+0

@Jeroen, könnten Sie bitte das Beispiel geben? Wenn ich 'library (xts)' versuche, werden die Exportfunktionen von 'zoo' automatisch geladen. – kohske

+0

@kohske das Beispiel ist im Thema. Das 'xts'-Paket enthält eine NAMESPACE-Datei, in der die erforderlichen Funktionen von 'zoo' manuell importiert werden. Daher hat es nicht das Problem, denke ich. – Jeroen

Antwort

2

Für diejenigen, die interessiert sind, geht die Diskussion here auf der r-devel-Mailingliste:

Verwandte Themen