Verwenden des Importpakets mit Drake

Sep 05 2020

Das Herausfinden des drakePakets war eine der besten jüngsten Entdeckungen als R-Benutzer. Ein Nachteil, den ich bei dem Paket in Bezug auf die Reproduzierbarkeit sehe, ist die Überfüllung des Arbeitsbereichs mit Funktionen, die lediglich Hilfsfunktionen sind.

Niemand weiß, ob diese sourced-Funktionen zusammenstoßen oder ob die Reihenfolge der libraryAufrufe von Bedeutung ist. Ich weiß, dass es das conflictedPaket gibt, aber es befasst sich nur mit Paketen. Ich weiß, dass die Codeeinheit in R ein Paket sein sollte, aber es scheint seltsam, eine Analyse mit einer Handvoll Dateien wie zu preprocessing.Rhaben training.Rund sie in ein Paket umzuwandeln. Mögliche Namenskonflikte beginnen sowieso ziemlich früh, und ich habe noch nie jemanden gesehen, der einen sauberen Ansatz für R vorstellte.

Es gibt jedoch das importPaket, mit dem der Import von Paketfunktionen und Funktionen / Variablen aus anderen Dateien ausgewählt werden kann. Angenommen, Sie haben eine Funktion ain a.R, dann ist der Import mit importder Funktion zugänglich, aber alle Abhängigkeiten sind für die Funktion verfügbar, aaber nicht importiert, was eine nützliche Isolation bietet.

Ich habe die Verwendung des importPakets mit getestet drake, kann jedoch drakenicht feststellen, ob sich die Abhängigkeiten der importierten Funktionen ändern, wodurch der tatsächliche Anwendungsfall verletzt wird. Kennt jemand eine Möglichkeit, Drake anzuweisen, diese Funktionen zu "detaillieren", oder eine andere Möglichkeit, sie zum Laufen zu bringen? Danke im Voraus!

Antworten

1 landau Sep 06 2020 at 01:41

Verfolgt standardmäßig drakenur die Funktionen in der Umgebung von make(), die Sie mit dem envirArgument festlegen können (plus Funktionen mit Namespace, die mit aufgerufen wurden pkg::fun(), aber es war ein Fehler, diese Funktion zu erstellen). envirist standardmäßig nur die aufrufende Umgebung ( parent.frame()). Stellen Sie also bei der Verwendung import::from()sicher, dass der Wert .intogleich ist, ""damit Inhalte in drakedie Umgebung gelangen.

ls()
#> character(0)
import::from(dplyr, mutate, .into = "")
ls()
#> [1] "mutate"
library(drake)
plan <- drake_plan(x = mutate(mtcars, x = 1))
vis_drake_graph(plan)

Erstellt am 2020-09-05 durch das reprex-Paket (v0.3.0)

Sie haben uns übrigens gerade eine hervorragende Alternative zu envir = getNamespace("yourPackage")von gegebenhttps://github.com/ropensci/drake/issues/1286#issuecomment-649088321Letzteres ist begrenzt, wenn Sie Funktionen aus mehreren Quellen abrufen möchten. So danke! Lassen Sie uns das Wort über diese Problemumgehung verbreiten.