在开发R包时,每次进行更改时都必须重新编译包吗?

时间:2010-10-29 20:25:41

标签: function r packages

我正在开发一个包

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

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

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

4 个答案:

答案 0 :(得分:8)

另请参阅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")
    

答案 1 :(得分:6)

查看?insertSource,这是R 2.12.0中的新功能,以及该帮助页面的另请参阅部分中的其他功能。另外,如果您的包有名称空间,请查看?assignInNamespace

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

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

答案 2 :(得分:5)

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

我甚至使用'mvbutils'来实时编辑'mvbutils',有时可能会有些毛茸茸。

“mvbutils”文档可以真正完成此操作的完整演示,但理论上现有的doco应该向您展示如何继续。

无法帮助你使用Emacs,对不起......

答案 3 :(得分:1)

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

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