【问题标题】:Organizing R Source Code组织 R 源代码
【发布时间】:2011-01-18 01:44:42
【问题描述】:

全部,

我第一次开始编写面向对象的 R 代码,并预计会有多个 R 文件之间存在依赖关系。我是 R 新手,除了一个庞大的脚本来测试想法之外,还没有写过任何东西。是否有在线资源提供有关如何组织代码的提示?缺少有关如何构建软件包的描述,我找不到这样的指导。在这一点上,我只想以这样一种方式组织代码,使加载和与例程集合交互尽可能简单。

感谢您提供的任何指导。

克里斯

【问题讨论】:

标签: r


【解决方案1】:

这个问题与:"How to organize large R programs?"密切相关

您应该考虑创建一个 R 包。您可以使用package.skeleton 函数从给定的一组 R 文件开始。我还强烈建议在开始时使用roxygen 来记录包,因为事后这样做要困难得多。

阅读"Writing R Extensions"。在线书籍“Statistics with R”有a section on this subject。还可以查看 Friedrich Leisch 的 Creating R Packages: A Tutorial。最后,如果您在纽约,请通过"Authoring R Packages: a gentle introduction with examples" 参加即将举行的 NY use-R 小组会议。

只是重申一些关于良好做法的建议:

  • 一个包允许你使用R CMD check,这对于捕捉错误非常有帮助;您可以单独查看使用codetools 包。
  • 软件包还强制您编写最少的文档,从长远来看,这会带来更好的实践。
  • 如果您希望代码健壮/可维护,还应该考虑进行单元测试(例如使用RUnit)。
  • 您应该考虑使用样式指南(例如Google Style Guide)。
  • 从一开始就使用版本控制系统,如果您要让代码开源,请考虑使用 github 或 r-forge。

编辑:

关于如何在不重建和安装完整包的情况下进行增量更改:我发现最简单的方法是在相关的 R 文件中进行更改,然后使用 source 命令加载这些更改。一旦您将库加载到 R 会话中,它在环境中将始终低于 .GlobalEnv(并且优先级较低),因此您直接获取或加载的任何更改都将首先使用(使用 search 命令看到这个)。这样,您就可以让您的包成为底层,并在您在环境中测试它们时覆盖更改。

或者,您可以使用像 StatET 或 ESS 这样的 IDE。它们使从 R 包中加载单独的行或函数变得非常容易。 StatET 设计得特别好,可以处理在类目录结构中管理包。

【讨论】:

  • 谢谢谢恩。正是我正在寻找的指导。
  • 所以这是您引用的 SO 讨论中出现的另一个问题,但未得到解答。当您在开发包中修改/添加代码时,如何在不进行安装的情况下重新加载包内容?有没有方便的方法?在编写代码和测试时,只是试图掌握一个正在经历的周期。
  • 查看“source”函数帮助文件示例部分中的函数“sourceDir”(在 R commnand 提示符下键入“?source”)。我的 ~/.Rprofile 文件中有一个非常相似的函数,并且我 sourceDir() 是我正在构建的包的 mypackage/R 目录,因为我对其进行了更改。有时我会重新安装软件包,但我发现这种方式更容易进行增量更改,而不会影响我在解释器中正在进行的任何当前工作。
  • 随着 RStudio 的出现,重新加载 R 包变得非常简单。只需从菜单中选择Build > Build and reload 即可。
【解决方案2】:

这是为了其他在搜索时被定向到此帖子的人的利益。 我也面临完全相同的情况,但没有找到可以清楚解释的资源。 这是我尝试通过几个简单的步骤来解决问题:
1)新建项目目录
2) 通过 R studio 创建包(过程同上)
3) 将两者保持在同一位置(以避免混淆)。
4) 安装和加载包:devtools 和 roxygen2。
5) 使用函数 load_all()。

你就完成了。

【讨论】:

  • load_all()有什么功能?
  • load_all 加载一个包。它大致模拟了安装包并加载库时发生的情况
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 2011-08-08
  • 2011-06-04
相关资源
最近更新 更多