我应该如何处理';助手';R包中的函数? 背景

我应该如何处理';助手';R包中的函数? 背景,r,coding-style,package,roxygen,R,Coding Style,Package,Roxygen,我写了一个R包,现在一个合作者(最近的CS毕业生,是R的新手)正在编辑和重构代码。在这个过程中,他将我的函数划分为更小、更通用的函数 他所做的是有道理的,但当我开始使用package.skeleton()时,每个函数有一个文件。现在,他添加了主函数所依赖的函数,但这在函数本身之外的用途可能有限 他建议所有函数都放在一个文件中,但我反对,因为当我们处理不同的文件时,版本控制更容易 从那以后,我开始使用roxygen来记录文本中的每个函数 问题: 处理函数的推荐方法是什么:显然,helper函数应该

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

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

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

从那以后,我开始使用roxygen来记录文本中的每个函数

问题: 处理函数的推荐方法是什么:显然,helper函数应该和main函数一起使用,但我需要在多大程度上记录helper函数


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

我在两种情况下切断了我的功能:

  • 当它提高了主函数代码的可读性时,和/或
  • 当它避免复制粘贴代码时,例如在同一函数中多次使用同一代码
  • 我确实在主函数的文件中包含了所谓的helper函数,但前提是这些helper函数不在任何其他函数中使用。实际上,我认为它们嵌套在main函数中。我确实理解您关于版本控制的论点,但是更改helper函数归结为更改主函数的性能,因此我认为将它们保存在同一个文件中没有问题

    一些助手函数可能会在其他不同的函数中使用,然后我将它们保存在它们自己的文件中。我经常导出这些函数,因为用户可能会感兴趣。将其与eg
    lm
    和底层的
    lm.fit
    进行比较,高级用户可以充分利用
    lm.fit
    来加速代码等

    我使用相当多的软件包中使用的命名约定(并从linux派生),在每个“隐藏”函数前面加一个点。因此,这使得

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

    .helper.function是否可以像不导出helper函数一样简单?@Joshua我不知道,我不熟悉导出函数的方式/内容/原因/位置您可能需要一个名称空间文件来指定哪些函数是用户“可见”的,哪些不可见。你可以试着用一个新的。在您希望用户不要看到并在包结构根目录中的命名空间文件中使用“exportPattern(“^[^\\\.]”)的函数前面,如果您使用的是roxygen,最好显式地
    @export
    将要导出+1到hadley的函数导出到roxygen部分!谢谢如果在一个额外的文件中有一个非导出的助手函数,那么如何为这些助手文件提供源代码,以便主函数可以使用它们?毕竟,它们不会被导出,因此用户看不见。@shosaco在一个无关紧要的包的上下文中。如果您使用的是一个包,也就是说,只有一堆带有函数的脚本,那么在使用主函数之前,您必须使用
    source()
    来获取帮助文件的源代码。请记住,所有内容都会以这种方式在全局环境中结束,因此您可能会意外地覆盖和/或删除helper函数。