R中的错误报告

本文档解释了如果您在R项目中发现错误,应采取的措施,或者有一个你想提交的补丁。它包括:

  1. 确保你的问题是一个错误;
  2. 提交错误报告的位置(请参阅垃圾邮件保护注释!)
  3. 如何编写有用且高效的错误报告;
  4. 如何提交补丁;
  5. 如果出现问题该怎么办。

目的是充分利用您和R开发人员的时间时间,通过确保错误报告对开发人员的回应。

确保这是一个错误

有几种情况下,某些东西肯定是一个bug;其中一个例子是R会话意外终止,或分段断层。这看起来像是:

***捕获的segfault***地址(nil),导致“内存未映射”

如果你看到这样的错误,除非你自己写了调用编译的代码或内部函数(例如,通过.C类.内部),这绝对是个bug1.

其他明显错误的例子是代码不起作用的情况文档应该说什么:要么代码错误,要么文档是。某种方式需要修复。

代码正在执行某些操作想不到的不一定是bug-请务必仔细阅读您的功能文档打电话来看看它表现出来的行为是否符合设计要求做,即使这不是你想要的。类似地看起来一模一样数字不相等是已知的、有记录的和难处理的问题,而不是错误。

在所有情况下,如果您认为这可能是一个错误,请尝试从命令行--香草的选项,以确保这是一个干净的会话,然后看看这个bug是否还会出现。减少您的运行函数调用所需的最少代码特别是,仅附加该调用所需的包(如有)。

如果您对R中的新功能有建议,而不是一个bug,您可以将此提交到提交错误的同一位置,请参阅下一节。

如果你的问题不属于这些类别中的任何一个,如果是R跑得比预期慢,比如说,或者有什么工作但没有按照你认为最好的方式定义,你应该咨询某人。如果你不知道谁可以检查你的代码,看看是否可以加快速度,或者如果另一个功能更适合您的需要寻求帮助的有用场所有:

  1. r-help邮件列表; 其他R邮件列表.
  2. 生物导体支架网站.
  3. R部分StackOverflow的.
  4. R互联网中继聊天(IRC)频道.

在哪里提交bug报告和修补程序

如果您的问题确实是一个bug-或者因为它属于上面的错误类别之一,或者因为您已请求他人帮助他们已经确认这是一个问题-现在是提交报告的时候了,所以它可以被修复。

根据问题的不同,您可能需要在中提交错误报告不同的地方。第一步是查看函数的哪个包有一个错误来自。R核心团队只保留核心语言和标有维护人员:R核心团队<R-core@R-project.org>.你可以通过运行例如维护人员(“图形”)在R中。
然而,注意:确实如此向R-core发送有关错误的电子邮件等等,甚至没有安全漏洞!!

如果你的bug在一些包装而不是由R Core团队,您应该将报告提交给包维护人员。正在运行bug.report(package=“somePkg”)指示你找到了正确的位置,要么打开相关的错误跟踪网站页面或帮助您撰写电子邮件给软件包维护者。

这个错误报告功能在某些IDE中被禁用(例如RStudio)以避免误用;确定提交报告自己,从查看的输出开始包装描述(“somePkg”)包的R帮助,或来自相关存储库的软件包网页,例如CRAN(起重机)生物导体.有些软件包有一个错误提交页面,例如上的问题跟踪器GitHub,列在错误报告包中的字段描述。如果你点击这个链接,你可能会发现你的bug已经已报告,否则您可以在那里提交报告下面讨论了错误报告指南。如果没有bug提交页面,您应该将错误报告通过电子邮件发送到包维护人员通过包描述中的地址。

如果您的bug是在语言中,或者支持Core包,您应该将报告提交给R巴吉拉(Bugzilla).
注:由于垃圾邮件发送者的滥用,自2016年7月9日起,仅限“成员”(包括所有以前提交过bug的人)可以提交新的bug在R的Bugzilla上。为了获得bugzilla帐户(即成为“成员”),请发送电子邮件(从您要用作的地址您的登录)到bug-report-request@r-project.org简要地解释原因,一名志愿者会将你加入R的Bugzilla成员。重要的是要确保报告不是无关的。最简单的方法是首先查看中即将发生的更改,查看bug是否已经修补(刚刚未发布然而),并且到浏览最新的错误报告搜索bug在里面查看Bugzilla是否(即使尚未修补)报道。如果您的错误尚未报告或修复,您可以报告遵循本节中的指导原则的错误写一份好的错误报告.如果您有一个补丁伴随您的bug,请参阅部分如何提交修补程序.

默认情况下,提交给R的报告巴吉拉(Bugzilla)是公开的。如果你相信您的漏洞是一个安全漏洞,不应公开,您可以在错误提交页面上选择“显示高级字段”,滚动直到页面底部,并检查只有允许R-安全组查看该错误。在检查此标志之前,尝试确保漏洞确实是安全的是好的敏感,利用它将允许攻击者执行代码无法使用来自相同的上下文。注释系统(),系统2(),动态加载()可以被设计用来执行任意代码。

如果您希望提交功能请求,而不是错误报告,你最好先在r-devel公司邮寄列表。如果反馈是正面的,您可以使用Bugzilla上的错误报告表单,您应该在其中选择心愿单在中组件字段并启动您的摘要心愿单:.

与消息翻译相关的问题应发送到最后译者或相关人员翻译团队。要找到最后一个翻译人员,您需要查看相关顶部的评论.po型R中的文件源代码,例如数据库中消息的德语翻译包裹在src/library/base/po/R-de.po。你可以从CRAN下载R源代码,或以其他方式浏览R-devel源代码他们的镜子打开了github.

写一份好的错误报告

错误报告应包括复制这个缺陷。这应该尽可能简单。如果试图修复的人这个bug不知道如何让它出现,或者必须跳过用很多不必要的铁环来让它出现,你会浪费很多他们的时代。

Bugzilla由少数人维护,因此最好确保你的错误报告写得清楚、好。如果不是,它将从维护者那里吸收更多能量,并且需要更长的时间bug需要修复,否则最终可能无法处理。特别是,您应该:

  1. 为错误写一个清晰而独特的摘要。“停止运行lm()导致崩溃“很好;“软件崩溃”不是。
  2. 在描述中包括重现错误的步骤上述内容。
  3. 确定发生了什么(“软件崩溃”)和您预期会发生(“lm()应该停止运行”)。
  4. 确定您所在的R平台、架构和版本发现了这个bug。您可以通过键入以下命令从R中检索R.版本.
  5. 只关注发生的事实,而不是你的错误是什么以及从哪里来的理论。

在这一点上,你已经写了一份很好的bug报告!坐下来等待如果你遇到任何问题响应,请参阅一节如果有问题.

如何提交修补程序

有时你会发现一个bug,从代码中也可以看到,如何修复。发生这种情况时,您有机会提交补丁,可以减少R开发人员的工作量:测试、调整并包含代码,而不必全部从刮擦。

要准备修补程序,您需要最新的开发人员版本R。这是在颠覆(SVN)存储库。在系统上安装SVN后,打开命令行并类型:

svn校验https://svn.r-project.org/r/trunk/R-开发

这将创建一个目录,R-开发,在您当前的工作目录。它包含最新版本的源代码第页,共页。

仔细检查并进行必要的更改,以便进行修补错误-尝试保持任何编码风格和惯例你正在改变用途的函数,只是为了让事情更容易。一旦你完成,转到R-开发终端中的目录和类型:

svn更新svn diff>补丁.diff

这将更新代码,然后创建一个新文件,补丁.diff,包含最新版本R和您的修改。这是一个补丁!之前提交修补程序,通过以下方式确保构建的系统正常工作正在运行:

进行检查开发

阅读输出并查找注释、警告和错误。最后,将补丁附加到您正在编写的错误报告中,请在报告中注明有一个相关的补丁,你就完成了。

如果有问题

在理想的情况下,您可以编写一份信息丰富的错误报告(也许提交修补程序),有人会立即出现并修复它,每个人很开心。在我们拥有的世界上,维护R的人有很多他们都是志愿者。这意味着,实际上,bug可能需要很长时间才能修复、意外错过或导致意外或不愉快的结果-不是出于任何恶意,只是因为负责软件的人可能会感到压力很大。

如果您遇到R的Bugzilla的技术问题一段时间后解决问题,您应该联系当前维护人员:simon.urbanek@R-project.org.如果您觉得您的bug被遗漏了(例如,因为新版本的R已经出来了,它还没有固定),您可以通过以下方式引起注意只需添加一条评论,如“这仍然存在于x.y.z中发布”。最好是安装预发布alpha或beta版本,以确认它仍然存在,并报告那。

如果你觉得评估有误,你可以留言给对Bugzilla的影响。如果您亲自认识某个会员你可以直接联系他们。在这两种情况下,请提交您的案例明确,并尊重R核心成员可以对问题的重要性(甚至是是否为bug)有所不同比你做的好。


  1. 如果您正在调用compiled代码,检查您是否使用了错误的参数使R崩溃类型(模式)。