【发布时间】:2011-05-02 14:53:59
【问题描述】:
我正在用 R 开发一个包
当我调试一个特定函数或一组函数时,测试该函数的最佳方法是什么?
每次我想检查我的更改时,我是否必须使用 source('function.R') 或 R CMD build?
(关联的 emacs ess 键绑定的额外功劳)
【问题讨论】:
-
emacs+ess 的额外功劳……太糟糕了,Dirk 刚去火车。
我正在用 R 开发一个包
当我调试一个特定函数或一组函数时,测试该函数的最佳方法是什么?
每次我想检查我的更改时,我是否必须使用 source('function.R') 或 R CMD build?
(关联的 emacs ess 键绑定的额外功劳)
【问题讨论】:
查看?insertSource,这是 R 2.12.0 中的一个新函数,以及该帮助页面的“另请参阅”部分中的其他函数。另外,如果您的包有命名空间,请查看?assignInNamespace。
以上假设您在谈论更新和调试 R 源代码,而不是编译代码。
我通常使用source() 路由来加载我正在改进/调试的新版本的功能,以及通常的 R 调试工具。但是我的包中还没有命名空间。多年来,我的手指已经非常习惯于在 emacs+ess 中使用 C-c C-l 键绑定来获取缓冲区。
【讨论】:
另请参阅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")
【讨论】:
您可能想看看“mvbutils”包。我一直用它来实时编辑我的包;我可以在加载包时添加、删除和编辑函数和文档,并且更改会反映在加载的版本、已安装的版本中(因此它们会保留在下一个 R 会话中)以及 [当我告诉它]在“源包”中。当我想将压缩版本分发给其他人时,我只通过 R CMD 重新构建。为了测试代码,我使用了“调试”包,它在加载的包上运行良好。
我什至使用“mvbutils”来实时编辑“mvbutils”,这有时会有点麻烦。
“mvbutils”文档确实可以提供完整的实际演示,但理论上现有的文档应该向您展示如何继续。
无法帮助您使用 Emacs,抱歉...
【讨论】:
foodweb,这对在我的代码中查找依赖关系很有帮助。
我遇到了同样的问题,我在使用 RStudio 时解决了它。
在编辑器中,我检查了包含函数的 R 文件的“保存时源”选项。由于我习惯于每次编辑文件时都保存文件(我认为这是一个好习惯),因此在我的 R 工作区中加载的相应函数始终是最新的。
【讨论】: