Quelle est la méthode / le stream de travail recommandé pour contacter l’équipe R Core afin de proposer des demandes de fonctionnalités?
Par “demandes de fonctionnalités” Je ne veux pas simplement dire “j’aimerai voir la fonctionnalité XY faire XY, alors ce serait cool si vous aviez l’intention de l’implémenter”, mais plutôt de proposer du code à la place.
J’aime R et je suis disposé à consortingbuer, partager le code et tout. Pourtant, j’ai parfois du mal à comprendre exactement comment consortingbuer 😉 J’ai consulté la page Développeur R Project et j’ai utilisé la liste de diffusion r-devel plusieurs fois. Surtout en ce qui concerne ce dernier point, j’ai l’impression que ce n’est pas le bon endroit / pas désiré pour élaborer la demande de fonctionnalité avec le code actuel (qui peut parfois être plus qu’un simple liner). Je me demande donc s’il y a une façon “meilleure” ou plus “systématique” de le faire.
On m’a demandé de fournir un court exemple:
J’utilise beaucoup les classes de référence S4 et j’ai implémenté beaucoup de petites fonctions utilitaires pour mes objects. Une telle fonction utilitaire est une sorte de fonctionnalité de “réinitialisation”:
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
Très souvent, ce n’est pas la fonctionnalité la plus sophistiquée au monde qui apparaît sur ma liste “oh, ça manque”. De plus, le fait de développer un emballage complet peut parfois ressembler à une fissure de la noix avec une masse.
c’est une excellente question. Tout en aimant beaucoup R, je trouve son modèle de développement frustrant par moments. Je dirais que les meilleures options sont
sweep
a quelques années (le fait de se plaindre des dimensions incompatibles plutôt que de renvoyer silencieusement la mauvaise réponse), mais seulement après avoir proposé l’idée ; attendre une semaine; relancer l’idée; envoi de code prototype; le tester pour s’assurer qu’il n’a pas provoqué une baisse de performance; discussion ultérieure … plosortingx
consortingbuer (par exemple, j’ai consortingbué au package plosortingx
Jim Lemon, qui est une compilation de petits utilitaires de traçage), et contactez le responsable / auteur. Il est très improbable que vous introduisiez de nouvelles fonctionnalités dans la base R, à moins que i) ne suscite l’intérêt de l’équipe de développement R Core, ou ii) une extension des fonctionnalités existantes améliorant son fonctionnement ou son efficacité . un membre de R Core est suffisamment intéressé. Vous pouvez bien sûr déposer un bogue sous le critère Liste de souhaits et fournir du code, mais ne soyez pas surpris si l’équipe R Core n’accepte pas les nouvelles fonctionnalités même si elles sont fournies avec du code.
Les raisons de cette position ont été discutées auparavant; Même si vous fournissez du code implémentant la nouvelle fonctionnalité X pour l’inclure dans R, vous transmettez la charge de maintenance à l’équipe R Core et ces personnes ont peu de temps et de ressources pour le faire. L’équipe R Core développe efficacement la base de R pour ses propres intérêts / recherches / besoins.
Comme les paquets R sont des citoyens de première classe, il y a peu de raisons de demander à R core d’implémenter ou d’inclure votre code pour la fonctionnalité X. Comme d’autres l’ont déjà dit, implémentez vos idées dans votre propre package ou consortingbuez à un autre package qui fournit déjà le code associé à votre nouvelle fonctionnalité X.
Même des paquets incroyablement utiles et largement utilisés, par exemple data.table, ne seront probablement pas intégrés à la base R à court et à moyen terme, car ils augmentent la complexité de la base de code, imposent une maintenance à l’équipe R Core et / ou ne sont pas en baisse dans les remplacements pour le code existant; data.table fournit une extension de type trame de données incroyablement rapide et mieux adaptée aux grands ensembles de données et aux «requêtes» sur ces données. Il n’est cependant pas compatible avec le bloc de données de R, en utilisant différentes conventions. Cela fonctionne bien en tant que paquet et peut continuer à le faire sans avoir à être dans R.
Ce qui précède décrit la situation telle que je la vois pour les nouvelles fonctionnalités. Pour les rapports de bogues, déposez un rapport de bogue! Ensuite, envisagez de poursuivre la discussion sur R-Devel en citant l’ID du rapport de bogue. Les correctifs fournis pour prendre en charge votre rapport de bogue faciliteront la résolution des bogues ou l’ajout de nouvelles fonctionnalités / améliorations. Le correctif doit inclure à la fois les sources R qui doivent être modifiées et un correctif pour toute documentation devant être modifiée. Le correctif doit être contre l’arborescence SVN du serveur R SVN . Comme le mentionne @BenBolker dans les commentaires, les rapports de bogues sont mieux classés dans le site Web de rapport de bogue de R. Toute discussion sur le bogue sur R-Devel devrait être liée au rapport de bogue. De cette façon, les insectes ne tombent pas dans les fissures et ne sont pas pris en compte.
La manière habituelle est d’écrire un paquet et de l’obtenir sur CRAN. (Toutes les annonces envoyées à la liste des packages sont copiées sur rhelp.) Ensuite, en utilisant son utilisation productive sur rhelp (ou peut-être SO), vous le remarquerez. Je pense ici aux efforts déployés au fil des ans par Hadley Wickham, Dirk Eddelbuettel, Terry Therneau, Gabor Grothendieck, Frank Harrell et Matthew Dowle, pour nommer les six premiers consortingbuteurs qui ont rendu mes efforts de R plus productifs. En fait, alors que j’écrivais cette liste, elle s’allonge et je m’excuse auprès de plusieurs autres personnes qui ont apporté des consortingbutions que j’utilise souvent.
Au cours de cette année, Brian Ripley a raconté une anecdote expliquant la position de l’équipe R-core. Il a déclaré qu’il acceptait un patch à deux lignes pour une fonction d’un programmeur R ( John Chambers , si je me souviens bien). Les deux lignes de code contenaient trois bogues (!), Qu’il devait ensuite corriger. Depuis lors, la position par défaut de R-core est de refuser les demandes de fonctionnalités pour R-base, même celles avec le code fourni. (Les demandes de correction de bogue sont correctes, tant que vous avez vérifié que c’est vraiment un bogue. Utilisez le système de suivi des bogues R pour cela.)
Bien qu’il ne soit pas impossible d’introduire quelque chose dans R-base, il est presque toujours très important (p <1e-6) de créer un paquet ou d'en ajouter un existant.