我应该如何处理R包中的'helper'函数?

Dav*_*uer 28 coding-style r package roxygen

背景

我写了一个R包,现在是一个合作者(最近的CS毕业生,他是R的新手)正在编辑和重构代码.在这个过程中,他将我的功能划分为更小,更通用的功能.

他的所作所为是有道理的,但是当我开始时package.skeleton(),每个功能都有一个文件.现在,他添加了主要功能所依赖的功能,但这可能在功能本身之外的使用有限.

他建议所有函数都放在一个文件中,但我反对,因为当我们处理不同的文件时,它更容易进行版本控制.

我已经开始使用roxygen来记录文本中的每个功能.

处理函数的推荐方法是什么:显然辅助函数应该与main函数保持一致,但是我需要在多大程度上记录辅助函数?

@export评论中的建议很有帮助,但我很想知道其他人如何组织他们的代码.

Jor*_*eys 29

我在两个条件下削减了我的功能:

  1. 当它提高主函数代码的可读性时,和/或
  2. 当它避免复制粘贴代码时,例如,如果在同一函数中使用相同的代码几次.

我确实在main函数的文件中包含了所谓的辅助函数,但只要这些辅助函数不在任何其他函数中使用.实际上,我认为它们嵌套在main函数中.我确实理解了你的版本控制论证,但更改辅助函数归结为改变main函数的性能,所以我认为将它们保存在同一个文件中没有问题.

一些辅助函数可能在不同的其他函数中使用,然后我将它们保存在自己的文件中.我经常导出这些功能,因为它们可能对用户有用.将此与例如lm和底层进行比较lm.fit,其中高级用户可以正确地使用它lm.fit来加速代码等.

我使用相当一些包中使用的命名约定(并从linux派生),通过点前面的每个"隐藏"函数.这样做

.helper.function <- function(x, ...){
    ... some code ...
}

main.function <- function(x, ...){
    ...some code, including .helper.function(y, ...)
}
Run Code Online (Sandbox Code Playgroud)

我明确地@export所有需要导出的函数,而不是辅助函数.判断一个函数是否可能对最终用户感兴趣并不总是很容易,但在大多数情况下它非常清楚.

举一个例子:几行代码来切断NA线我认为是辅助函数.将数据集转换为导出和文档的正确格式的更复杂的功能.

因人而异