Quais convenções para nomear variáveis e funções você favorece no código R?
Pelo que eu posso dizer, existem várias convenções diferentes, todas as quais coexistem em uma harmonia cacofônica:
1. Uso de separador de ponto, por exemplo
stock.prices <- c(12.01, 10.12)
col.names <- c('symbol','price')
Prós: tem precedência histórica na comunidade R, predominante em todo o núcleo R e recomendado pelo Guia de estilo R do Google .
Contras: repleto de conotações orientadas a objetos e confuso para iniciantes R
2. Uso de sublinhados
stock_prices <- c(12.01, 10.12)
col_names <- c('symbol','price')
Prós: uma convenção comum em muitas linguagens de programação; preferido pelo Guia de Estilo de Hadley Wickham e usado nos pacotes ggplot2 e plyr.
Contras: historicamente não usado por programadores de R; é irritantemente mapeado para o operador '<-' no Emacs-Speaks-Statistics (alterável com 'ess-toggle-underscore').
3. Uso de capitalização mista (camelCase)
stockPrices <- c(12.01, 10.12)
colNames <- c('symbol','price')
Prós: parece ter ampla adoção em várias comunidades linguísticas.
Contras: tem precedente recente, mas não é usado historicamente (na base R ou em sua documentação).
Finalmente, como se não fosse confuso o suficiente, devo salientar que o Guia de Estilo do Google defende a notação de ponto para variáveis, mas capitalização mista para funções.
A falta de estilo consistente nos pacotes R é problemática em vários níveis. Do ponto de vista do desenvolvedor, torna difícil manter e estender o código de outros (especialmente onde seu estilo é inconsistente com o seu). Do ponto de vista do usuário R, a sintaxe inconsistente aumenta a curva de aprendizado de R, multiplicando as maneiras como um conceito pode ser expresso (por exemplo, essa função de conversão de data é asDate (), as.date () ou as_date ()? Não, é como. Encontro()).
fonte
alllowercase
nomes de variáveis, e abundância de nomes muito curtos retas-de-the-equação (x
,y
, etc.).ImfDataTransformed
ou a versão estendida naturalIMFDataTransformed
não são tão fáceis de ler como o meu TOGGLEcamelCase preferido:IMFdataTransformed
...Respostas:
Boas respostas anteriores, então apenas um pouco para adicionar aqui:
sublinhados são realmente irritantes para usuários de ESS; considerando que o ESS é amplamente usado, você não verá muitos sublinhados no código criado por usuários do ESS (e esse conjunto inclui um monte de R Core, bem como autores de CRAN, exceções como Hadley apesar);
os pontos também são maus porque podem se misturar em um método simples de envio; Acredito ter lido uma vez comentários a esse respeito em uma das listas R: os pontos são um artefato histórico e não são mais incentivados;
portanto, temos um vencedor claro ainda em pé na última rodada: camelCase. Também não tenho certeza se realmente concordo com a afirmação de 'falta de precendente na comunidade R'.
E sim: o pragmatismo e a consistência superam o dogma. Portanto, tudo o que funciona e é usado por colegas e co-autores. Afinal, ainda temos espaços em branco e chaves para discutir :)
fonte
?make.names
parece sugerir que nomes separados por pontos são preferidos?Fiz uma pesquisa sobre quais convenções de nomenclatura são realmente usadas no CRAN e foram aceitas no R Journal :) Aqui está um gráfico que resume os resultados:
Acontece (talvez sem surpresas) que lowerCamelCase era mais frequentemente usado para nomes de funções e nomes separados por período. Mais frequentemente usados para parâmetros. Usar UpperCamelCase, conforme preconizado pelo guia de estilo R do Google, é realmente raro, porém, e é um pouco estranho que eles defendam o uso dessa convenção de nomenclatura.
O artigo completo está aqui:
http://journal.r-project.org/archive/2012-2/RJournal_2012-2_Baaaath.pdf
fonte
print
corresponde a todas as convenções, exceto UpperCamel e .OTHER_style.Sublinha todo o caminho! Ao contrário da opinião popular, há várias funções na base R que usam sublinhados. Corra
grep("^[^\\.]*$", apropos("_"), value = T)
para ver todos eles.Eu uso o estilo oficial de codificação Hadley ;)
fonte
Eu gosto do camelCase quando o camel realmente fornece algo significativo - como o tipo de dados.
dfProfitLoss, onde df = dataframe
ou
vdfMergedFiles (), em que a função pega um vetor e expele um dataframe
Embora eu ache que _ realmente aumenta a legibilidade, parece haver muitos problemas com o uso de.-_ Ou outros caracteres em nomes. Especialmente se você trabalha em vários idiomas.
fonte
Isso se resume à preferência pessoal, mas sigo o guia de estilo do google porque é consistente com o estilo da equipe principal. Ainda não vi um sublinhado em uma variável na base R.
fonte
Como indico aqui:
Como a verbosidade dos identificadores afeta o desempenho de um programador?
vale a pena ter em mente como seus nomes de variáveis são compreensíveis para seus colegas de trabalho / usuários se eles não forem falantes nativos ...
Por esse motivo, eu diria que sublinhados e pontos são melhores do que letras maiúsculas, mas, como você destacou, a consistência é essencial em seu script.
fonte
Como outros mencionaram, os sublinhados vão atrapalhar muitas pessoas. Não, não é proibido, mas também não é particularmente comum.
Usar pontos como separador fica um pouco complicado com classes S3 e semelhantes.
Na minha experiência, parece que muitos dos babacas do R preferem o uso de camelCase, com algum uso de pontos e um punhado de sublinhados.
fonte
Normalmente, eu renomeio minhas variáveis usando um ix de sublinhados e uma capitalização mista (camelCase). Variáveis simples são nomeando usando sublinhados, exemplo:
PSOE_votes -> número de votos para o PSOE (grupo político da Espanha).
PSOE_states -> Categórico, indica o estado onde PSOE vence {Aragon, Andalucia, ...)
PSOE_political_force -> Categorial, indica a posição entre os grupos políticos do PSOE (primeiro, segundo, terceiro)
PSOE_07 -> União de PSOE_votes + PSOE_states + PSOE_political_force em 2007 (h eader -> votos, estados, posição )
Se minha variável é o resultado de uma função aplicada em uma / duas Variáveis I usando uma capitalização mista.
Exemplo:
positionXstates <- xtabs (~ estados + posição, PSOE_07)
fonte
Tenho preferência por capitais mistos.
Mas costumo usar pontos para indicar qual é o tipo de variável:
mixedCapitals.mat é uma matriz. mixedCapitals.lm é um modelo linear. mixedCapitals.lst é um objeto de lista.
e assim por diante.
fonte