为了提出功能请求,联系R核心团队的推荐方式/工作流程是什么?
通过"功能请求",我不仅仅意味着发出类似"我希望看到功能XY执行XY的东西,所以如果你继续为我实现这个功能会很酷",而是提出实际的代码.
我喜欢R,我愿意贡献,分享代码和所有.然而,有时我发现有点难以弄清楚究竟如何贡献;-)我看了R Project Developer Page并且多次使用r-devel邮件列表.特别是对于后者,我得到的印象是,它不是正确的地方/不希望用实际代码详细说明一个人的功能请求(有时可能不仅仅是两个班轮).所以我想知道是否有一种"更好"或更"系统"的方式来做到这一点.
我被要求提供一个简短的例子:
我正在广泛使用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,但我发现它的开发模式有时令人沮丧.我想说最好的选择是
sweep几年前进行了一些额外的错误检查(实际上它抱怨了不匹配的维度而不是默默地回答错误的答案),但只是在提出这个想法之后; 等一个星期; 重新提出这个想法; 发送一些原型代码; 测试它以确保它不会导致性能损失; 进一步讨论......plotrix包,这是一个小的绘图工具的汇编),并联系维护者/作者.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上的错误的讨论都应链接到错误报告.这样虫子就不会陷入裂缝中而且会被遗漏.
42-*_*42- 15
通常的方法是编写一个包,并将其放到CRAN上.(发送到包列表的所有公告都会被复制到rhelp.)然后使用rhelp(或者可能是SO)演示它的生产用途会引起注意.我想到了多年来Hadley Wickham,Dirk Eddelbuettel,Terry Therneau,Gabor Grothendieck,Frank Harrell和Matthew Dowle所做的努力,他们想起了前六位的贡献者,他们让我的R工作更有成效.实际上,当我写这个名单时,它会越来越长,我向其他几个经常使用我做出贡献的人道歉.
Ric*_*ton 14
在今年的useR上,Brian Ripley讲述了解释R-core团队立场的轶事.他说他接受了一个来自备受尊敬的R程序员(约翰钱伯斯,如果我没记错的话)的功能的两行补丁.这两行代码包含三个错误(!),然后他必须修复它们.从那时起,R-core的默认位置是拒绝对R-base的功能请求,即使是那些提供代码的功能.(错误修复请求很好,只要你高音检查它确实是一个错误.使用R Bug跟踪系统.)
虽然在R-base中获取内容并非不可能,但是几乎总是显着(p <1e-6)更容易自己创建包或添加到现有包中.