向R核心团队提出功能请求

Rap*_*ter 49 open-source r

为了提出功能请求,联系R核心团队的推荐方式/工作流程是什么?

通过"功能请求",我不仅仅意味着发出类似"我希望看到功能XY执行XY的东西,所以如果你继续为我实现这个功能会很酷",而是提出实际的代码.

我喜欢R,我愿意贡献,分享代码和所有.然而,有时我发现有点难以弄清楚究竟如何贡献;-)我看了R Project Developer Page并且多次使用r-devel邮件列表.特别是对于后者,我得到的印象是,它不是正确的地方/不希望用实际代码详细说明一个人的功能请求(有时可能不仅仅是两个班轮).所以我想知道是否有一种"更好"或更"系统"的方式来做到这一点.

编辑2011-11-09

我被要求提供一个简短的例子:

我正在广泛使用S4 Reference Classes并为我的对象实现了许多小实用程序功能.一个这样的效用函数是某种"重置"功能:

setRefClass(
    "A", 
    fields=list(a="numeric", b="character"),
    methods=list(
        reset=function(fields=NULL, ...){
            temp <- new("A")
            if(is.null(fields)){
                fields <- names(getRefClass("A")$fields())
            }
            sapply(fields, function(x){
                .self$field(name=x, value=temp$field(x))        
            })
            return(TRUE)
        }
    )
)

x <- new("A", a=1:10, b=letters[1:10])

x$a
x$b
x$reset(fields="a")

x$a
x$b

x$reset()
x$a
x$b
Run Code Online (Sandbox Code Playgroud)

很多时候,这不是世界上最精彩的功能,突然出现在我的"哦,那个缺失"列表中.此外,它可能是一种"单一"功能,开发整个包装有时感觉就像用大锤敲打坚果.

Ben*_*ker 36

这是一个很好的问题.虽然我非常喜欢R,但我发现它的开发模式有时令人沮丧.我想说最好的选择是

  1. 将最初的想法(没有广泛的代码)发布到R-devel,看看你是否可以得到讨论/热情.你必须愿意推动:例如,我设法在sweep几年前进行了一些额外的错误检查(实际上它抱怨了不匹配的维度而不是默默地回答错误的答案),但只是在提出这个想法之后; 等一个星期; 重新提出这个想法; 发送一些原型代码; 测试它以确保它不会导致性能损失; 进一步讨论......
  2. 将您的想法作为附加包实现.如果您提出的是改变核心R功能(另一方面,这种变化也将更难被接受),这当然要困难得多.另一方面,您可以在附加软件包中实现任何您想要的任何东西,它有几个优点.(1)您的代码将立即供所有人使用(如果您使用R-forge,Rforge或CRAN发布); (2)这是一种在没有R核心支持的情况下开发和完善思想的方法; (3)即使它永远不会被R-core接受,它仍然会作为一个包.
  3. 编辑:尝试找到一个现有的实用程序或"misc"包来贡献(例如,我已经贡献了Jim Lemon的plotrix包,这是一个小的绘图工具的汇编),并联系维护者/作者.
  4. 将您的愿望清单项目发布到R bug跟踪器(带代码附件等).然而,与使用选项#1或#2相比,他们会被更少的人看到,因此更有可能在错误跟踪器中萎缩,而没有看到光明的一天.

  • 啊,我不能同意你的意见!我几乎已经放弃了与R core争夺新功能的想法,并且编写一个附加包可以为我节省很多努力.我梦想有一天好老的R开发可以转移到像GitHub这样更"开放"的地方,所以程序员可以比现有的bugzilla + svn + email系统更方便地贡献... (8认同)

Rei*_*son 26

你是不太可能获得新特性的基础R本身,除非我)它激起将R核心开发团队之一的兴趣,或ii)是对现有功能的扩展,提高了它的工作方式或使其更有效 R Core的成员对此非常感兴趣.您当然可以根据愿望列表标准提交错误并提供代码,但如果R核心团队即使附带代码也不接受全新功能也不会感到惊讶.

之前曾讨论过这种立场的原因; 即使您提供实现新功能X以包含在R中的代码,您也会将维护负担转嫁给R核心团队,这些人员只有有限的资源和时间来执行此操作.R核心团队有效地为自己的兴趣/研究/需求开发了R的基础.

由于R软件包几乎是一等公民,因此几乎没有理由要求R核心实现或包含您的功能X代码.因此,正如其他人所说的那样,在您自己的软件包中实现您的创意功能或将其贡献给另一个软件包已经提供了与您的新功能X相关的代码.

即使是非常有用的广泛使用的软件包,例如data.table也不太可能在短期内成为基础R,因为它们会增加代码库的复杂性,给R核心团队带来维护负担,和/或不会替换现有代码; data.table提供类似数据框的扩展,速度极快,更适合大数据集和对这些数据的"查询".但它与R的数据帧不兼容,采用不同的约定.它作为一个包很好地工作,并且可以继续这样做,而不需要 R .

以上描述了我看到的新功能的情况.对于错误报告,请提交错误报告!然后考虑继续进一步讨论R-Devel引用错误报告ID.为支持您的错误报告而提供的补丁将更容易修复错误或添加新功能/增强功能.补丁应包括需要更改的R源以及需要更改的任何文档的补丁.补丁应该与R SVN服务器上的SVN树对照.正如@BenBolker在评论中提到的,错误报告最好在R的错误报告网站中提交.任何有关R-Devel上的错误的讨论都应链接到错误报告.这样虫子就不会陷入裂缝中而且会被遗漏.

  • +1维护负担问题非常重要.很少有人喜欢维护他们自己的代码,更不用说他们继承的东西了.另一方面,可以非常欢迎简化代码,使其更易于维护和扩展.根据我的经验(不是R,而是其他软件),这通常是通过一些非常聪明的重构或一些创造性的功能抽象来实现的.此外,非常欢迎有用的测试用例或示例:这些间接减少了维护工作和相关的干扰. (5认同)
  • 我同意错误跟踪系统有点破碎.我们可以做一些非R-core支持人员(博士生?),他们可以帮助处理bug跟踪工作负载,这样R-core就不会那么热衷于响应. (5认同)
  • 很好的答案,但我不完全同意最后一段.令我感到沮丧的是,人们不鼓励使用错误跟踪器,而是将错误报告发送到r-devel,在那里他们很容易滑过裂缝并且不容易被搜索.(这主要是对R-core的有效劝阻提出质疑,因为他们对那些善意发布非虫子的人大吼大叫,而不是和你在一起.) (4认同)

42-*_*42- 15

通常的方法是编写一个包,并将其放到CRAN上.(发送到包列表的所有公告都会被复制到rhelp.)然后使用rhelp(或者可能是SO)演示它的生产用途会引起注意.我想到了多年来Hadley Wickham,Dirk Eddelbuettel,Terry Therneau,Gabor Grothendieck,Frank Harrell和Matthew Dowle所做的努力,他们想起了前六位的贡献者,他们让我的R工作更有成效.实际上,当我写这个名单时,它会越来越长,我向其他几个经常使用我做出贡献的人道歉.

  • 大卫,首先脱离我的帽子是因为你继续在r-help上存在.你在做自耕农的工作.真的很感激. (7认同)
  • 谢谢你们......我还在努力了解所有这些kewl尺度对我的幻灯片规则的影响.特别是这个LL3规模. (2认同)

Ric*_*ton 14

在今年的useR上,Brian Ripley讲述了解释R-core团队立场的轶事.他说他接受了一个来自备受尊敬的R程序员(约翰钱伯斯,如果我没记错的话)的功能的两行补丁.这两行代码包含三个错误(!),然后他必须修复它们.从那时起,R-core的默认位置是拒绝对R-base的功能请求,即使是那些提供代码的功能.(错误修复请求很好,只要你高音检查它确实是一个错误.使用R Bug跟踪系统.)

虽然在R-base中获取内容并非不可能,但是几乎总是显着(p <1e-6)更容易自己创建包或添加到现有包中.

  • 真正的问题是r核心缺乏单元测试基础设施.没有它,代码维护是非常困难的.(现在我为什么要求测试,如果你为我的一个软件包提供补丁) (4认同)
  • John Chambers不是R核心成员*?? (难道他不能自己检查他的有缺陷的代码进入SVN服务器吗?) (3认同)