【问题标题】:How to edit and debug R library sources如何编辑和调试 R 库源
【发布时间】:2021-10-07 10:18:00
【问题描述】:

我在我的 R 脚本中包含了一个名为blotter 的库,其中有一个错误。是否有一种简单的方法可以让我编辑源代码以尝试调试问题?

【问题讨论】:

标签: r


【解决方案1】:

查找tracebrowser 函数,它们是R 中用于调试的基本工具。说要编辑函数foo的源代码,然后说

trace("foo",edit=TRUE)

将在编辑器中打开 foo 的源代码供您更改。但是,这是用于交互式调试;包中的源文件没有改变。因此,一旦发现错误,您需要更改包源文件以使更改永久生效。

【讨论】:

  • 嗨!我已经下载了一个包,并且我知道我必须编辑的功能 - 我只是在所有文件中找不到它。这样做的正确方法是什么?你能指出我正确的方向吗?
  • 我认为值得一提的是,一旦你有了编辑过的源代码,你就可以简单地将它分配给一个新函数。这样,在您的代码中就可以明确表明您使用的是原始包的修改版本。
【解决方案2】:

R 的开发版本(2010 年 7 月 16 日)实现了这样的功能:

在 r-devel 中添加了一个新工具,供作者进行实验 包。

这个想法是将修改后的代码从包源插入到 无需重新安装即可运行包。所以一个人可以改变,测试,改变, 等快速循环。

该机制是评估一些源代码文件,返回一个 环境对象,它是代码的快照。由此 环境、函数和方法可以插入到环境中 当前会话中的包。插入使用 trace() 机制,所以可以恢复原来的代码。

一步法是:

insertSource("mySourceFile.R", package = "myPackage", functions = "foo")

更多详情请参阅此帖子:Inserting and testing revised functions in a package

【讨论】:

    【解决方案3】:

    您对我是否有一种简单的方法可以编辑源代码以尝试调试问题? 有一个明显的答案:使用源代码,Luke!

    blotterR-Forge 上的一个包,您可以从中获取blotter sources here。这是看待开源的标准方式,可能会帮助它修复错误。

    【讨论】:

    • 好的,我该怎么做?通常我可以只调用“库”,我假设我无法使用这些资源。我下载了源代码,但是有将近 40 个文件。我是否对它们中的每一个单独运行“源”以将它们放入我的脚本中?
    • @Ben McCann 假设没有 C 或 FORTRAN 代码,您可以提取 R 文件,source() 它们并从那里工作(每次更改文件时,您必须获取它或将其复制/粘贴到R)。一切就绪后,您可以将文件复制回包二进制文件并构建它。我在博客文章中描述了一个快速的 R 包构建:danganothererror.wordpress.com/2010/07/23/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 2020-07-02
    • 2013-01-07
    • 1970-01-01
    • 2014-03-19
    • 2011-10-26
    相关资源
    最近更新 更多