Quelles conventions pour nommer les variables et les fonctions préférez-vous dans le code R ?
Pour autant que je sache, il existe plusieurs conventions différentes, qui coexistent toutes dans une harmonie cacophonique :
1. Utilisation d'un séparateur de points, par ex.
stock.prices <- c(12.01, 10.12)
col.names <- c('symbol','price')
Pour : Il a un précédent historique dans la communauté R, il est répandu dans le noyau de R et il est recommandé par Guide de style R de Google .
Cons : Plein de connotations orientées objet, et déroutant pour les novices en R
2. Utilisation de caractères de soulignement
stock_prices <- c(12.01, 10.12)
col_names <- c('symbol','price')
Pour : Une convention commune dans de nombreux langages de programmation ; favorisée par Guide de style de Hadley Wickham et utilisé dans les paquets ggplot2 et plyr.
Cons : N'est pas historiquement utilisé par les programmeurs R ; est fâcheusement mappé à l'opérateur '<-' dans Emacs-Speaks-Statistics (modifiable avec 'ess-toggle-underscore').
3. Utilisation de majuscules mixtes (camelCase)
stockPrices <- c(12.01, 10.12)
colNames <- c('symbol','price')
Pour : Il semble avoir été largement adopté dans plusieurs communautés linguistiques.
Cons : A un précédent récent, mais n'est pas utilisé historiquement (ni dans la base R ni dans sa documentation).
Enfin, comme si cela n'était pas déjà assez déroutant, je dois signaler que le guide de style de Google préconise la notation par points pour les variables, mais la capitalisation mixte pour les fonctions.
L'absence de style cohérent entre les paquets R est problématique à plusieurs niveaux. Du point de vue du développeur, cela rend difficile la maintenance et l'extension du code d'autrui (surtout lorsque son style est incompatible avec le vôtre). Du point de vue de l'utilisateur de R, l'incohérence de la syntaxe accentue la courbe d'apprentissage de R, en multipliant les façons d'exprimer un concept (par exemple, cette fonction de coulée de date est-elle asDate(), as.date() ou as_date() ? Non, c'est as.Date()).