【问题标题】:When developing an R package, do I have to recompile the package every time I make a change?开发R包时,每次修改都需要重新编译包吗?
【发布时间】:2011-05-02 14:53:59
【问题描述】:

我正在用 R 开发一个包

当我调试一个特定函数或一组函数时,测试该函数的最佳方法是什么?

每次我想检查我的更改时,我是否必须使用 source('function.R') 或 R CMD build?

(关联的 emacs ess 键绑定的额外功劳)

【问题讨论】:

  • emacs+ess 的额外功劳……太糟糕了,Dirk 刚去火车。

标签: function r packages


【解决方案1】:

查看?insertSource,这是 R 2.12.0 中的一个新函数,以及该帮助页面的“另请参阅”部分中的其他函数。另外,如果您的包有命名空间,请查看?assignInNamespace

以上假设您在谈论更新和调试 R 源代码,而不是编译代码。

我通常使用source() 路由来加载我正在改进/调试的新版本的功能,以及通常的 R 调试工具。但是我的包中还没有命名空间。多年来,我的手指已经非常习惯于在 emacs+ess 中使用 C-c C-l 键绑定来获取缓冲区。

【讨论】:

  • 感谢您的回答:Cc Cl 很有帮助,但请注意其他人,在服务器上使用它时(在 ess-remote 模式下),文件路径以 ~/pkg/R/ 开头fn.R 而不是 /server:pkg/R/fn.R 即使当我写入文件时,它是 /server:.. 位置,如果我不使用服务器位置,我会收到错误:无法打开文件' /ssh:server/home/usr/pkg/R/function.R' 你注意到了吗?
  • @David:对不起,我的emacs+ess fu很弱。我从来没有按照你描述的方式使用它。 (我假设您没有编辑本地版本并期望 ESS 以某种方式知道文件在服务器上的位置?)建议您在此处将上述问题作为一个新问题提出,它会比关于 R 包开发的 Q 引起更多关注.
  • 这是一个很好的答案,但现在我已经掌握了 devtools 的窍门,我会说这是解决问题的最佳方法,所以我更新并选择了 Hadley's answer
【解决方案2】:

另请参阅http://github.com/hadley/devtools/,它提供了一些工具来简化这项任务。

例如,在对源代码进行更改后,您使用函数install() 构建、安装和重新加载包:

library(devtools)
install("package_name")

devtools 还可以更轻松地:

  • 重新加载完整包:

    load_all("pkg")
    
  • 使用 roxygen2 创建或更新文档

    document("pkg")
    
  • 运行/inst/test/中的所有脚本:

    test("pkg")
    
  • 构建和 R CMD 检查:

    check("pkg")
    

【讨论】:

  • 现在我已经熟悉了,我看到 devtools 让生活更轻松,开发更高效。谢谢!
【解决方案3】:

您可能想看看“mvbutils”包。我一直用它来实时编辑我的包;我可以在加载包时添加、删除和编辑函数和文档,并且更改会反映在加载的版本、已安装的版本中(因此它们会保留在下一个 R 会话中)以及 [当我告诉它]在“源包”中。当我想将压缩版本分发给其他人时,我只通过 R CMD 重新构建。为了测试代码,我使用了“调试”包,它在加载的包上运行良好。

我什至使用“mvbutils”来实时编辑“mvbutils”,这有时会有点麻烦。

“mvbutils”文档确实可以提供完整的实际演示,但理论上现有的文档应该向您展示如何继续。

无法帮助您使用 Emacs,抱歉...

【讨论】:

  • 这是一个很棒的包,谢谢。我最近很高兴找到foodweb,这对在我的代码中查找依赖关系很有帮助。
【解决方案4】:

我遇到了同样的问题,我在使用 RStudio 时解决了它。

在编辑器中,我检查了包含函数的 R 文件的“保存时源”选项。由于我习惯于每次编辑文件时都保存文件(我认为这是一个好习惯),因此在我的 R 工作区中加载的相应函数始终是最新的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多