2010-08-02 90 views
16

我已经在我的R脚本中包含了一个名为blotter的库,它有一个bug。有没有一种简单的方法可以让我编辑源代码来尝试和调试问题?如何编辑和调试R库源

+1

[r修改和重建包]的可能重复(https://stackoverflow.com/questions/34800331/r-modify-and-rebuild-package) – Scarabee 2017-10-13 10:08:21

回答

16

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

trace("foo",edit=TRUE) 

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

+0

嗨!我已经下载了一个软件包,并且知道我必须编辑的功能 - 我无法在所有文件中找到它。什么是正确的方式来做到这一点?你能指出我正确的方向吗? – vagabond 2016-07-12 21:36:33

9

的这种特征在R的开发版本中实现(2010年7月16日):

一个新的设施已被添加到R-devel的通过的 包作者试验。

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

该机制是评估一些源代码文件,返回一个 环境对象,它是代码的快照。从这个 环境中,可以将功能和方法插入到当前会话中的包的环境 中。该插入使用trace() 机制,因此可以恢复原始代码。

一步法版本是:

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

看到这个职位的更多细节:Inserting and testing revised functions in a package

3

你的问题有没有为我编辑源到一个简单的方法尝试并调试问题?有明显的答案:使用源码,卢克!

blotter是一个包R-Forge从哪里可以得到blotter sources here。这是查看Open Source的标准方式,可能还会帮助解决错误。

+1

好的,我该怎么做?通常我可以称之为'图书馆',我假设我无法处理这些资源。我下载了源代码,但有近40个文件。我是否每个人都运行“源代码”以便将它们放入我的脚本中? – 2010-08-02 23:25:28

+3

@Ben McCann假设没有C或FORTRAN代码,你可以提取R文件,'source()'它们并从那里开始工作(每次你改变文件时你必须提供它或者将它复制/粘贴到R中)。一旦你有一切工作,你可以将文件复制回包二进制文件并构建它。我在这里的博客文章中描述了一个快速的分步构建R包:http://danganothererror.wordpress.com/2010/07/23/building-an-r-package-under-windows-without- cc-or-fortran-code/ – 2011-06-07 14:04:35