r - 我应该如何在R包中处理 'helper'函数?

标签 r coding-style package roxygen

背景
我写了一个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/

    相关文章:

    r - R程序中超大矩阵的svd

    从 R : status 127 warning on Linux not on Windows 运行 .exe

    html - HTML元素属性 `=`符号前后使用空格

    r - 生成具有总和约束的排列

    coding-style - 在生产版本中留下注释掉的代码是不好的做法

    scala - Scala 中柯里化(Currying)的两种方式;每个的用例是什么?

    Javacc 包问题

    linux - 在远程和 "command not found"上执行bash脚本

    java - 如何在一个java文件中导入多个包?

    r - 将标签添加到由 grid.arrange 从多个绘图制作的绘图