2

drake作为 R 用户,了解该软件包是最近最好的发现之一。然而,我在可重复性方面看到的包的一个缺点是工作区的混乱,其中的函数只是辅助函数。

没有人知道这些sourced 函数是否冲突,或者library调用的顺序是否重要。我知道有conflicted包,但它只处理包。preprocessing.R我知道 R 中的代码单元应该是一个包,但是对少数文件进行分析(如)training.R并将它们变成一个包似乎很奇怪。无论如何,潜在的名称冲突很早就开始了,而且我从未见过有人为 R 提出一种干净的方法。

然而,有一个import包允许从其他文件中挑选导入包函数函数/变量。假设你有函数ain a.R,然后使用import该函数导入它是可访问的,但它的所有依赖项都可用于该函数a导入,提供有用的隔离。

我使用带有 的import包进行了测试drake,但drake没有检测到导入函数的依赖关系是否发生变化,从而破坏了它的实际用例。有谁知道告诉德雷克“深入研究”这些功能的方法,或者任何其他让它工作的方法?提前致谢!

4

1 回答 1

1

按照设计,drake仅跟踪 的环境中的函数make(),您可以使用envir参数设置这些函数(加上使用 调用的命名空间函数pkg::fun(),但构建该功能是错误的)。envir只是默认的调用环境(parent.frame())。因此,当您使用 时import::from(),请务必设置为.into等于,""以便将内容带入drake's 环境。

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 包(v0.3.0)于 2020 年 9 月 5 日创建

顺便说一句,您刚刚为我们提供了一个很好的替代方案,可以替代https://github.com/ropensci/drake/issues/1286#issuecomment-649088321envir = getNamespace("yourPackage") ,如果您想从多个来源提取功能,后者是有限的。那谢谢啦!让我们传播有关此解决方法的信息。

于 2020-09-05T18:41:47.800 回答