Utilisation du package d'importation avec drake
La découverte du drakepackage a été l'une des meilleures découvertes récentes en tant qu'utilisateur R. Cependant, un inconvénient que je vois avec le package en termes de reproductibilité est l'encombrement de l'espace de travail avec des fonctions qui ne sont que des fonctions d'assistance.
Personne ne sait si ces sourcefonctions d entrent en conflit ou si l'ordre des libraryappels compte. Je sais qu'il y a le conflictedpackage, mais il ne traite que des packages. Je sais que l'unité de code dans R devrait être un package, mais il semble étrange d'avoir une analyse avec une poignée de fichiers comme preprocessing.R, training.Ret de les transformer en package. De toute façon, les conflits de noms potentiels commencent assez tôt, et je n'ai jamais vu personne présenter une approche claire pour R.
Il existe cependant le importpackage qui permet de sélectionner à la perfection l'importation des fonctions du package et des fonctions / variables à partir d'autres fichiers. Supposons que vous ayez une fonction adans a.R, alors l'importer à importl' aide de la fonction est accessible, mais toutes ses dépendances sont disponibles pour la fonction amais pas importées, ce qui fournit une isolation utile.
J'ai testé en utilisant le importpackage avec drake, mais je drakene détecte pas si les dépendances des fonctions importées changent, rompant ainsi son cas d'utilisation réel. Est-ce que quelqu'un connaît un moyen de dire à drake de "creuser" ces fonctions, ou tout autre moyen de le faire fonctionner? Merci d'avance!
Réponses
De par sa conception, drakene suit que les fonctions dans l'environnement de make(), que vous pouvez définir avec l' envirargument (plus les fonctions d'espacement de noms appelées avec pkg::fun(), mais ce fut une erreur de créer cette capacité). envirest juste l'environnement d'appel par défaut ( parent.frame()). Donc, lorsque vous utilisez import::from(), assurez-vous de définir .intoégal à ""pour qu'il apporte des éléments dans drakel'environnement de.
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)
Créé le 2020-09-05 par le package reprex (v0.3.0)
Soit dit en envir = getNamespace("yourPackage")passant , vous venez de nous donner une excellente alternative à dehttps://github.com/ropensci/drake/issues/1286#issuecomment-649088321, ce dernier étant limité si vous souhaitez extraire des fonctions de plusieurs sources. Donc merci! Faisons passer le mot sur cette solution de contournement.