问题标签 [drake-r-package]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
559 浏览

r - 跨 R 项目传输对象的最佳实践是什么?

我想在另一个 git-versioned R 项目中使用在一个 git-versioned R 项目中生成的 R 对象(例如,清理的数据)。

具体来说,我有多个 git 版本的 R 项目(包含drake计划),它们为我的论文实验做各种事情(例如,生成材料、导入和清理数据、生成报告/文章)。

理想情况下,特定于实验的项目应该是:

  1. 可连接 - 这样我就可以将我在这些项目中生成的对象(主要是数据和材料)放入另一个生成我的论文报告的 git 版本化 R 项目中。
  2. 自包含 - 以便我可以在其他非论文项目(例如演示文稿、报告和期刊手稿)中使用它们。在共享此类项目时,我最好不要共享单一的论文项目。
  3. 版本化 - 以便它们在不同项目中的使用可以独立(例如,如果我在提交论文后对手稿的数据清理进行了更改,我仍然希望论文能够像最初编译的那样重现)。

目前我可以看到三种方法:

  1. 重新创建数据清洗流程
    • 但是:这涉及到复制/粘贴,我想避免这种情况,尤其是在上游发生变化的情况下。
  2. 通过更改工作目录访问相关脚本/功能
    • 但是:即使我使用here它,这似乎也会导致重现性差。
  3. 将源项目制作成包,并将我想要“导出”的对象制作成导出的数据(根据Hadley 的 R 包指南的数据部分

有没有其他方法可以做到这一点?

编辑:我尝试了@landau 提出的使用单一drake计划的建议,这在一段时间内效果很好,直到(类似于@vrognas 的案例)我最终得到了太多依赖于相同的对象。因此,我在上面对这个问题的意图进行了一些澄清。

0 投票
1 回答
63 浏览

r - 为什么我不能在德雷克 R 计划中使用 ls()?

我正在尝试列出drake计划环境中与特定条件匹配的所有对象/变量/数据框。但是,当我尝试使用ls()它时,我返回了一个错误。

我怎么能这样做呢?

0 投票
1 回答
75 浏览

r - 如何将德雷克动态子目标与实际数据帧/源目标相关联?

drake手册给出了使用动态子目标的以下示例:

https://books.ropensci.org/drake/dynamic.html#dynamic-transformations

reprex 包(v0.3.0)于 2020 年 9 月 2 日创建

现在让我们说由于某种原因,一个或多个这些子目标失败,例如row_9939cae3。我想调查其原因,为此我需要知道输入目标函数的确切参数。我如何获得该数据的副本?

我在这里先向您的帮助表示感谢。

标记

0 投票
1 回答
63 浏览

r - 增加输入的德雷克计划工作流程

我有一个德雷克计划,它使用带有file_in. 然后读取文件夹中的每个文件并进行一些转换。最后,它加入结果。

如果我添加一个新文件,我希望计划中的新计算只应用于这个文件,然后加入到以前的结果中。然而,该计划所做的是:它检测到目标的变化,然后根据该目标重新计算所有目标。

注意:文件数量很大(几千个),计算量很大。

解决方案(查看landau的解决方案以获得更好的解决方案)

此解决方案完成了我标记为解决方案的答案:

您使用 file_in() 或 target(format = "file") 声明的任何文件或目录都被视为不可约的数据单元,并且在 drake 中的这种行为在未来的开发中不会改变。但是您可以在多个目标之间拆分文件,以便在文件更改时某些目标保持最新。

这将创建动态目标,因此新文件将创建新的动态目标,但不会重新计算旧目标。

0 投票
1 回答
66 浏览

r - 将导入包与 drake 一起使用

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

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

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

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

0 投票
1 回答
109 浏览

r - 如何在 R drake 中组合和过滤动态文件目标?

我在我的德雷克计划中创建了一组文件。我想将这些文件的一个子集复制到另一个位置。

下面的代码几乎实现了这一点。但是,在获取我要复制的文件目标的子集后,drake 对文件更改的依赖跟踪丢失了。

如何在不丢失德雷克依赖跟踪的情况下组合/子集动态文件目标?

reprex 包(v0.3.0)于 2020 年 9 月 24 日创建

0 投票
0 回答
28 浏览

r - 德雷克中的可选依赖项?

考虑一下我有一些“可选”依赖项的情况——有时我想将它们包含在我的处理链中,有时我不想。例如

根据我如何配置我的处理链,有时我们想要包括所有 A、B 和 C,有时它们中的一个或多个不是必需的,因此不应该包括在内。我怎样才能最好地构建这样一个计划来实现这一目标?

最好的祝愿,

标记

0 投票
1 回答
33 浏览

r - Drake 仅在某些情况下缺少来自静态分支的依赖项

我有一个通用形式的计划,如下所示。我的实际计划更复杂,我无法在玩具示例中重现此错误。有没有人见过这样的问题,你对可能导致它的原因有什么想法吗?该计划采用一组模型结果,生成一些图表的摘要并为每个图表生成报告。

目标 dep1_a-c 和 dep2_a-c 已生成,但 dep2 存在问题 dep2_a-c 出现在图中,但 report_a-c 未显示为取决于它们,因为它们分别位于 dep1_a-c 上。也就是说,生成了 dep1_a 并且 report_a 依赖于它,而生成了 dep2_a,尽管 dep2 在map报告目标中的调用中,但 report_a 并不“相信”它依赖于 dep2_a。

我在运行时遇到make的错误是以下形式的错误: $error$message: object 'dep2' not found $error$calls:base::eval(quote(...并且引用显示 dep2 没有在调用中评估 dep2_a 等,它只是裸 dep2 当然作为目标存在,只有 dep2_a-c '我很困惑为什么这会发生在一个目标而不是其他目标上:(

我的真实示例有几个依赖项,并且我的示例中的 dep2 等效项在输出中几乎相同,它们返回映射到同一列表上的相同类型的对象,但由于某种原因,它们的目标在制作报告目标时未正确评估

我试过clean(destroy = TRUE)从头开始运行和重新运行,但没有运气

0 投票
1 回答
24 浏览

r - 在全局环境中定义默认缓存德雷克

我有一个德雷克计划并打算根据输入数据(即 input-dir1 -> results-dir1)切换缓存目录。这样做的好处是,如果数据源切换,我不需要重新运行整个管道。

make类似或loadd似乎总是使用的函数find_cache,默认为.drake当前 R 工作区中的目录。

有没有办法在当前全局环境中定义一个不在 .drake 目录中的默认缓存?我想避免在每次调用时手动定义缓存makeclean或者loadd通过参数cache

谢谢

0 投票
1 回答
32 浏览

r - 根据早期的目标参数将三个变量之一映射到目标?

我正在研究这样定义的 Drake 工作流程:

目标输出如下所示:

这与我想要的非常接近,但我坚持的是projectName我希望将三个项目名称之一用于最终目标,具体取决于前面步骤中产生的输入是否被规范化和/或对数转换.

目前,我生成了 18 个目标,因此我希望每个项目名称都映射到 6 个目标。

有什么办法可以做到这一点吗?