背景
我写了一个R包,现在一个协作者(R的新手CS研究生)正在编辑和重构代码。在此过程中,他将我的功能划分为更小,更通用的功能。
他的做法很有意义,但是当我从package.skeleton()
开始时,每个函数只有一个文件。现在,他添加了主要功能所依赖的功能,但是在功能本身之外的用途可能有限。
他建议将所有功能都放在一个文件中,但是我反对这样做,因为当我们处理不同文件时,进行版本控制比较容易。
从那以后,我开始使用roxygen在文本中记录每个功能。
题
推荐的处理函数的方式是什么:显然辅助函数应该与主函数保持一致,但是我需要在多大程度上记录辅助函数?
注释中的@export
建议很有帮助,但是我很好奇知道其他人如何组织他们的代码。
最佳答案
我在两种情况下削减了功能:
我确实在主函数的文件中包含了所谓的辅助函数,但前提是只要这些辅助函数未在任何其他函数中使用。实际上,我认为它们嵌套在main函数中。我确实理解您关于版本控制的观点,但是更改helper函数归结为更改main函数的性能,因此我认为将它们保留在同一文件中没有问题。
某些辅助函数可能会用在其他不同的函数中,然后将它们保存在自己的文件中。我经常导出这些功能,因为它们可能是用户感兴趣的。将此与
lm
和底层lm.fit
进行比较,高级用户可以在其中适当使用lm.fit
来加速代码等。通过在每个“隐藏”函数之前加点,我使用了很多软件包(从Linux派生)中使用的命名约定。因此,这使得
.helper.function <- function(x, ...){
... some code ...
}
main.function <- function(x, ...){
...some code, including .helper.function(y, ...)
}
我明确地@export需要导出的所有函数,而不是辅助函数。判断功能是否最终用户并不总是一件容易的事,但是在大多数情况下,这很清楚。
举个例子:几行代码可以截断NA行,我考虑了一个辅助函数。将数据集转换为我导出和记录的正确格式的更复杂的功能。
青年汽车
关于r - 我应该如何在R包中处理 'helper'函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5249673/