Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何构建R项目_R - Fatal编程技术网

如何构建R项目

如何构建R项目,r,R,我喜欢使用R,但与Python工作流相比,我很难获得感觉“稳定”的东西。 我的情况是: 我有一个git存储库,它承载一个R项目和renv环境 在这个存储库中,我有多个在某种程度上相互交织的分析 我想测试大部分功能,并且只在主分析脚本中调用测试过的功能 我知道通常的方法是R包。但是,由于R/中不允许有子文件夹,因此不能使用细粒度文件夹结构。 拆分存储库后,我将得到无数的小软件包、专用的R项目和renv环境,考虑到部分相互依赖性,这似乎是不正确的,比如我希望从任何地方都可以访问的助手函数 此外,

我喜欢使用R,但与Python工作流相比,我很难获得感觉“稳定”的东西。 我的情况是:

  • 我有一个git存储库,它承载一个R项目和
    renv
    环境
  • 在这个存储库中,我有多个在某种程度上相互交织的分析
  • 我想测试大部分功能,并且只在主分析脚本中调用测试过的功能
我知道通常的方法是R包。但是,由于
R/
中不允许有子文件夹,因此不能使用细粒度文件夹结构。 拆分存储库后,我将得到无数的小软件包、专用的R项目和
renv
环境,考虑到部分相互依赖性,这似乎是不正确的,比如我希望从任何地方都可以访问的助手函数

此外,类似于
drake
target
包的方法在再现性方面非常出色,但似乎适合于每个R项目的单一管道/分析

仅仅
source
到处覆盖所有内容(如这些包的示例工作流所示)是危险的,因为我希望小函数分解功能并增强可重用性,随着这些函数的增加,函数相互覆盖的可能性会增加。我可以为文件中的函数使用公共前缀,但这可能会导致名称过长,代码表达能力较差

使用
test进行测试,该测试主要针对软件包。我可以使用
test\u dir
,但这需要从shell脚本或其他东西笨拙地启动,IDE中不再支持运行单个测试

import
包解决了许多这些问题。它为您提供了一个文件作为工作区,您可以在其中定义任意数量的函数或常量,如果您从该文件导入函数,则该文件中的函数/导入函数可供该函数访问,但从外部不可用。这提供了非常整洁的封装,但这不适用于
drake
target
包,这些包无法检测导入函数的嵌套依赖项,从而破坏了它们的用途

所以我的问题是:你推荐什么方法来建立稍微大一点的东西?R上的所有指南都只针对非常简单的分析设置,并没有真正回答我的问题,它们很少涉及分析的可测试性或可预测行为

提前多谢


Michael

为什么不创建自己的R包呢,这会让代码变得非常复杂portable@stevec我在一开始的问题中就提到了这一点。不同分析的几个部分可能有一个函数,该函数可能需要命名为
preprocess
(或其他),这将在包中产生冲突,不是吗?如果是这样的话,与
源代码
相比,这如何保护我不受奇怪行为的影响?另外,我可能有一个分析特有的助手函数,我是否应该用很长的文件名“嵌套”这些函数,因为我不能在
R
中为每个分析创建子文件夹?如上所述,我不想用自己的存储库(?)、R项目和
renv
s来维护10个包,这也是一个部署的噩梦。为什么不创建自己的R包呢,这会让代码变得非常复杂portable@stevec我在一开始的问题中就提到了这一点。不同分析的几个部分可能有一个函数,该函数可能需要命名为
preprocess
(或其他),这将在包中产生冲突,不是吗?如果是这样的话,与
源代码
相比,这如何保护我不受奇怪行为的影响?另外,我可能有一个分析特有的助手函数,我是否应该用很长的文件名“嵌套”这些函数,因为我不能在
R
中为每个分析创建子文件夹?如前所述,我不想用10个包来维护它们自己的存储库(?)、R项目和
renv
s,这也是部署的噩梦。