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.
+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 ... –
@Jeroen, könnten Sie bitte das Beispiel geben? Wenn ich 'library (xts)' versuche, werden die Exportfunktionen von 'zoo' automatisch geladen. – kohske
@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