Qual é o seu estilo preferido para nomear variáveis ​​em R? [fechadas]

110

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()).

medriscoll
fonte
1
Há também casos de estilo MATLAB alllowercasenomes de variáveis, e abundância de nomes muito curtos retas-de-the-equação ( x, y, etc.).
Richie Cotton
5
sublinhados são como python, então eu tendo a usar sublinhados. ESS deve ser corrigido, isso é muito bobo.
Brendan OConnor
7
Não há nada para consertar, há um botão para isso. Mas o comportamento padrão é interpretar um sublinhado como um atalho para <- economizando uma tecla para pressionar. Portanto, se você publicar variáveis ​​com sublinhados (Oi, Hadley), você força todos os usuários de ESS a pressionar _ duas vezes para obter o bahaviour original - ou para personalizar sua configuração de ESS. Eu ainda prefiro camelCase por novas milhas náuticas.
Dirk Eddelbuettel
2
O camelCase também tem problemas, por exemplo, o estojo camel padrão ImfDataTransformedou a versão estendida natural IMFDataTransformednão são tão fáceis de ler como o meu TOGGLEcamelCase preferido: IMFdataTransformed...
PatrickT
1
Estou votando para encerrar esta questão como fora do tópico porque as respostas são baseadas na opinião.
Ben Bolker

Respostas:

81

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 :)

Dirk Eddelbuettel
fonte
6
1 Bem dito! [Se ao menos a equipe principal publicasse um guia de estilo definitivo; Acho que isso daria mais crédito ao uso já implícito.]
Shane
1
Eu poderia apenas estar me lembrando mal com base na minha própria tendência para casos mistos, mas acredito que foi isso que RG sempre usou quando eu estava trabalhando para ele. Eu acho que o que é bom para RG é bom para mim!
geoffjentry
Geoff: Não é uma regra ruim para seguir :)
Dirk Eddelbuettel
2
Obrigado pelo polegar para cima. Quanto ao 'documento de estilo canônico': desejar junto não significa que seja, ou eu estaria montando pôneis cor de rosa. Talvez você possa começar criando algo, que você pode colar no R Wiki e todos nós editarmos, adotarmos e aderirmos a ele. A esperança é eterna, como se costuma dizer ...
Dirk Eddelbuettel
1
@Dirk - Eu pretendo começar a usar o invólucro de camelo com base em sua recomendação, mas estou curioso para saber por que ?make.namesparece sugerir que nomes separados por pontos são preferidos?
David LeBauer,
73

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:

insira a descrição da imagem aqui

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

Rasmus Bååth
fonte
2
Por que as porcentagens não somam 100%?
e9t
10
@ e9t Porque um nome pode corresponder a muitas convenções de nomenclatura. printcorresponde a todas as convenções, exceto UpperCamel e .OTHER_style.
Rasmus Bååth
Seria bom atualizar este artigo.
Samuel-Rosa
34

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 ;)

Hadley
fonte
1
Isso é legal! Eu não estava ciente da função apropriada antes. Isso retorna 10 funções para mim em R 2.9.0; Eu dificilmente diria que é um caso convincente. Qual é a sua justificativa para sublinhados quando eles estão claramente em minoria para R?
Shane
3
Bem, é 16 em R 2.10.0, então é um aumento de 60% por versão;) Eu gosto principalmente deles porque eles me lembram Ruby; camelCase me lembra Java.
hadley
6
Hadley, meu coração diz para apoiar sua insurgência, mas minha cabeça diz para respeitar o padrão da comunidade e dizer sim para camelCase. :( Mas talvez a autoconsistência seja tudo o que importa.
medriscoll
5

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.

Robert
fonte
3

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.

Shane
fonte
3

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.

David Lawrence Miller
fonte
2

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.

Geoffjentry
fonte
1

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)

Calejero
fonte
0

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.

Jesse
fonte