向R核心团队提出function请求
联系R核心团队以推荐function请求的build议方式/工作stream程是什么?
通过“function请求”,我并不是简单地意味着发出类似于“我希望看到XY在XY中执行function”的东西,所以如果您继续为我实现这个function,那将会很酷,但是会提出实际的代码。
我爱R,愿意贡献,分享代码和所有。 然而,有时我觉得有点难以弄清楚如何做出贡献;-)我已经看了R Project Developer Page,并且使用了r-devel邮件列表几次。 特别是对于后者,我已经得到了这样的印象,那就是不适合用实际的代码(有时候不仅仅是两个class轮)来详细说明自己的特性请求。 所以我想知道是否有一个“更好”或更“系统”的方式来做到这一点。
编辑2011-11-09
我被要求提供一个简短的例子:
我广泛使用S4参考类,并为我的对象实现了很多小的实用function。 一个这样的效用函数是某种“重置”function:
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
很多时候,这不是世界上最奇特的function,popup我的“哦,这是缺less”列表。 另外,它可能是一个“单一”的function,开发整个包装有时感觉像用大锤开裂螺母。
这是一个很好的问题。 虽然真的很喜欢R,我发现它的发展模式有时令人沮丧。 我会说最好的select是
- 将最初的想法(没有广泛的代码)发布到R-devel,看看你是否可以讨论/热情。 你必须愿意推动:例如,我设法得到一些额外的错误检查纳入几年前
sweep
(实际上抱怨不匹配的维度,而不是默默地回答错误的答案),但只有在提出这个想法后; 等待一个星期; 重新提出这个想法; 发送一些原型代码; testing它以确保它不会导致性能下降; 进一步讨论… - 作为一个附加包来实现你的想法。 如果你提出的是对核心Rfunction的改变(当然,这种改变也难以被接受),这当然更难了。 另一方面,你可以在附加包中实现任何你想要的东西,并且它有几个优点。 (1)您的代码将可供所有人立即使用(如果您在R-forge,Rforge或CRAN上发布信息); (2) 没有从R核心入手,思路得以发展和完善; (3)即使它在R核中从未被接受,它仍然是一个包。
- 编辑 :尝试find一个现有的工具或“misc”包来贡献(例如,我已经贡献给Jim Lemon的
plotrix
包,这是一个小绘图工具的汇编),并联系维护者/作者。 - 将您的愿望清单项目发布到R错误跟踪器(带有代码附件等)。 但是,如果使用选项#1或#2,他们将会看到的人数less得多,结果更有可能在错误跟踪器中徘徊而没有看到白天。
除非i)它激发了R核心开发团队的兴趣,或者ii)是现有function的扩展,从而改进了它的工作方式或使其更加高效, R核心成员有足够的兴趣。 您当然可以根据愿望清单标准提交错误,并提供代码,但是如果R核心团队即使带有代码,也不接受全新的function,请不要感到惊讶。
这个立场的原因已经讨论过了, 即使你提供的代码实现新的functionX包含在R中,你将维护负担传递给R核心团队,这些人有限的资源和时间来做到这一点。 R核心团队为了自己的兴趣/研究/需求,有效地开发了R的基础。
由于R包几乎是一stream的公民,所以甚至没有理由要求R核实现或包含你的Xfunction的代码。正如其他人所说的那样,在你自己的包中实现你的想法特性, 或者将它们提供给另一个包已经提供了与您的新functionX相关的代码。
即使是广泛使用的令人难以置信的有用的软件包,例如data.table,也不可能在短中期内将其纳入基本R中,因为它们增加了代码库的复杂性,对R核心团队造成了维护负担,和/或不会取代现有的代码; data.table提供了一个非常快速的数据框架扩展,更适合于大数据集和对这些数据的“查询”。 它不符合R的数据框架,采用不同的惯例。 它作为一个包可以很好地工作,并且可以继续这样做而不需要在 R 中 。
以上描述了我所看到的新function的情况。 对于错误报告,请提交错误报告! 然后考虑跟进进一步讨论R-Devel引用错误报告ID。 提供的修补程序支持您的错误报告,可以更轻松地修复错误或添加新function/增强function。 该补丁应该包含需要更改的R源以及需要更改的任何文档的补丁。 这个补丁应该是针对R SVN服务器上的SVN树的。 正如@BenBolker在评论中提到的,错误报告最好在R的错误报告网站上提交。 任何关于R-Devel的错误的讨论应该链接到错误报告。 这样一来,错误就不会陷入裂缝中,而被错过。
通常的方法是编写一个包,并将其放到CRAN上。 (发送到软件包列表的所有公告都被复制到rhelp中。)然后使用rhelp(或者SO)展示它的生产用途,将会注意到它。 我在这里想到了哈德利·威克姆,德克·埃德尔柏特尔,特里·泰诺,加博尔·格洛腾迪克,弗兰克·哈雷尔和马修·道勒这些年来所做的努力,他们提到了前六个贡献者,他们让我的努力更有成效。 实际上,当我写这份清单的时间越来越长,我向其他几位经常作出贡献的人道歉。
Brian Ripley在今年的使用中讲述了R核心团队的立场。 他说,他接受了一个备受尊敬的R程序员的function( 约翰·钱伯斯 ,如果我没有记错的话)的两行补丁。 这两行代码包含三个错误(!),然后他必须修复。 从那以后,R-core的默认位置是拒绝R-base的特性请求,即使是那些提供了代码的特性请求。 (Bug修复请求没问题,只要你已经检查过它确实是一个bug,请使用R Bug Tracking System 。)
尽pipe将某些东西放入R基础并不是不可能的,但是几乎总是可以很容易地自行创build一个包或者添加到现有的包中(p <1e-6)。