将导入包与drake一起使用

问题描述

查找有关drake软件包是R用户最近的最佳发现之一。但是,在可重现性方面,我从包装中看到的一个缺点是工作空间混乱,其功能仅仅是辅助功能

没人知道这些source d函数是否冲突,或者library调用的顺序是否重要。我知道有conflicted软件包,但它只处理软件包。 我知道R中的代码单元应该是一个程序包,但是对少数文件,例如preprocessing.Rtraining.R进行分析并将它们转换为程序包,这似乎很奇怪。无论如何,潜在的名称冲突都是很早就开始的,而且我从未见过有人提出过针对R的简洁方法

但是有import软件包,它允许从其他文件中挑选软件包功能的导入。假设您在a中具有函数a.R,然后使用import导入该函数,则该函数是可访问的,但是其所有依赖项均可用于函数a,但不是导入,提供有用的隔离。

我使用import软件包和drake进行了测试,但是drake无法检测到导入函数的依存关系是否发生了变化,从而破坏了它的实际用例。有谁知道一种告诉德雷克“深入研究”这些功能方法,或任何其他方法来使它工作?预先感谢!

解决方法

根据设计,drake仅跟踪make()环境中的函数,您可以使用envir参数进行设置(加上用pkg::fun()调用的命名空间,但是建立这种能力是一个错误)。默认情况下,envir只是调用环境(parent.frame())。因此,当您使用import::from()时,请确保将.into设置为等于"",以便将东西引入drake的环境中。

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)

reprex package(v0.3.0)于2020-09-05创建

顺便说一句,您刚刚为我们提供了https://github.com/ropensci/drake/issues/1286#issuecomment-649088321envir = getNamespace("yourPackage")的替代品,如果您想从多个来源提取函数,则后者是有限的。那谢谢啦!让我们来宣传这种解决方法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...