【发布时间】:2021-10-07 10:18:00
【问题描述】:
我在我的 R 脚本中包含了一个名为blotter 的库,其中有一个错误。是否有一种简单的方法可以让我编辑源代码以尝试调试问题?
【问题讨论】:
标签: r
我在我的 R 脚本中包含了一个名为blotter 的库,其中有一个错误。是否有一种简单的方法可以让我编辑源代码以尝试调试问题?
【问题讨论】:
标签: r
查找trace 和browser 函数,它们是R 中用于调试的基本工具。说要编辑函数foo的源代码,然后说
trace("foo",edit=TRUE)
将在编辑器中打开 foo 的源代码供您更改。但是,这是用于交互式调试;包中的源文件没有改变。因此,一旦发现错误,您需要更改包源文件以使更改永久生效。
【讨论】:
R 的开发版本(2010 年 7 月 16 日)实现了这样的功能:
在 r-devel 中添加了一个新工具,供作者进行实验 包。
这个想法是将修改后的代码从包源插入到 无需重新安装即可运行包。所以一个人可以改变,测试,改变, 等快速循环。
该机制是评估一些源代码文件,返回一个 环境对象,它是代码的快照。由此 环境、函数和方法可以插入到环境中 当前会话中的包。插入使用 trace() 机制,所以可以恢复原来的代码。
一步法是:
insertSource("mySourceFile.R", package = "myPackage", functions = "foo")
更多详情请参阅此帖子:Inserting and testing revised functions in a package
【讨论】:
您对我是否有一种简单的方法可以编辑源代码以尝试调试问题? 有一个明显的答案:使用源代码,Luke!
blotter 是R-Forge 上的一个包,您可以从中获取blotter sources here。这是看待开源的标准方式,可能会帮助它修复错误。
【讨论】:
source() 它们并从那里工作(每次更改文件时,您必须获取它或将其复制/粘贴到R)。一切就绪后,您可以将文件复制回包二进制文件并构建它。我在博客文章中描述了一个快速的 R 包构建:danganothererror.wordpress.com/2010/07/23/…