Qual è il tuo stile preferito per denominare le variabili in R? [chiuso]


110

Quali convenzioni per la denominazione di variabili e funzioni preferisci nel codice R?

Per quanto ne so, ci sono diverse convenzioni differenti, che coesistono in cacofonica armonia:

1. Uso del separatore di periodo, ad es

  stock.prices <- c(12.01, 10.12)
  col.names    <- c('symbol','price')

Pro: ha la precedenza storica nella comunità R, prevalente in tutto il core R e consigliato dalla R Style Guide di Google .

Contro: Rife con connotazioni orientate agli oggetti e confuso per i neofiti R.

2. Uso di trattini bassi

  stock_prices <- c(12.01, 10.12)
  col_names    <- c('symbol','price')

Pro: una convenzione comune in molte lingue di programmazione; favorito dalla Style Guide di Hadley Wickham e utilizzato nei pacchetti ggplot2 e plyr.

Contro: non storicamente utilizzato dai programmatori R; è fastidiosamente mappato all'operatore '<-' in Emacs-Speaks-Statistics (modificabile con 'ess-toggle-underscore').

3. Uso di lettere maiuscole (camelCase)

  stockPrices <- c(12.01, 10.12)
  colNames    <- c('symbol','price')

Pro: sembra avere un'ampia adozione in diverse comunità linguistiche.

Contro: ha un precedente recente, ma non storicamente utilizzato (né nella base R né nella sua documentazione).

Infine, come se non fosse abbastanza confuso, devo sottolineare che la Guida allo stile di Google sostiene la notazione a punti per le variabili, ma l'uso di lettere maiuscole per le funzioni.

La mancanza di uno stile coerente tra i pacchetti R è problematica a diversi livelli. Dal punto di vista dello sviluppatore, rende difficile mantenere ed estendere il codice altrui (specialmente quando il suo stile non è coerente con il tuo). Dal punto di vista dell'utente R, la sintassi incoerente rende più accentuata la curva di apprendimento di R, moltiplicando i modi in cui un concetto potrebbe essere espresso (ad esempio, la funzione di casting della data è asDate (), as.date () o as_date ()? No, è come. Data()).


1
Ci sono anche casi di stile MATLAB alllowercasenomi delle variabili, e un sacco di nomi molto brevi rettilinei-from-the-equazione ( x, y, ecc).
Richie Cotton,

5
i trattini bassi sono come python, quindi tendo a usare i trattini bassi. ESS dovrebbe essere corretto, è davvero stupido.
Brendan OConnor

7
Non c'è niente da risolvere, ha un interruttore per quello. Ma il comportamento predefinito è interpretare un trattino basso come una scorciatoia per <- salvandoti un tasto da premere. Quindi, se pubblichi variabili con trattini bassi (Ciao, Hadley) costringi ogni utente ESS a premere _ due volte per ottenere il comportamento originale o per personalizzare la propria configurazione ESS. Preferisco ancora camelCase per nuove miglia nautiche.
Dirk Eddelbuettel

2
Anche camelCase ha dei problemi, ad esempio, il case cammello standard ImfDataTransformedo la versione estesa naturale IMFDataTransformednon sono facili da leggere come il mio TOGGLE preferito camelCase: IMFdataTransformed...
PatrickT

1
Voto per chiudere questa domanda come fuori tema perché le risposte sono destinate a essere basate sull'opinione.
Ben Bolker

Risposte:


81

Buone risposte precedenti quindi solo un po 'da aggiungere qui:

  • i trattini bassi sono davvero fastidiosi per gli utenti di ESS; dato che ESS è ampiamente utilizzato, non vedrai molti trattini bassi nel codice creato dagli utenti di ESS (e quel set include un gruppo di autori R Core e CRAN, nonostante le eccezioni come Hadley);

  • anche i punti sono cattivi perché possono confondersi in un semplice metodo di spedizione; Credo di aver letto una volta commenti in tal senso su uno degli elenchi R: i punti sono un artefatto storico e non sono più incoraggiati;

  • quindi abbiamo un chiaro vincitore ancora in piedi nell'ultimo round: camelCase. Inoltre, non sono sicuro di essere davvero d'accordo con l'affermazione di "mancanza di precendente nella comunità R".

E sì: pragmatismo e coerenza vincono il dogma. Quindi qualunque cosa funzioni e viene utilizzata da colleghi e coautori. Dopotutto, abbiamo ancora spazi bianchi e parentesi graffe su cui discutere :)


6
+1 Ben detto! [Se solo il core team pubblicasse una guida stilistica definitiva; Penso che ciò darebbe più credito al loro uso già implicito.]
Shane

1
Potrei semplicemente ricordare male sulla base della mia inclinazione verso il caso misto, ma credo che sia ciò che RG ha sempre usato quando lavoravo per lui. Immagino che ciò che è buono per RG sia buono per me!
geoffjentry

Geoff: Non è una cattiva regola da seguire :)
Dirk Eddelbuettel

2
Grazie per il pollice in su. Per quanto riguarda il 'documento di stile canonico': desiderare insieme non lo rende così, o starei cavalcando pony rosa. Forse puoi iniziare creando qualcosa, che potresti attaccare al Wiki di R e noi tutti lo modificheremo, adotteremo e aderiremo ad esso. La speranza nasce eterna, come si
suol

1
@Dirk - Ho intenzione di iniziare a dirigermi verso l'involucro del cammello in base alla tua raccomandazione, ma sono curioso di sapere perché ?make.namessembra suggerire che i nomi separati da punti siano preferiti?
David LeBauer

73

Ho fatto un sondaggio su quali convenzioni di denominazione sono effettivamente utilizzate su CRAN e che sono state accettate dal R Journal :) Ecco un grafico che riassume i risultati:

inserisci qui la descrizione dell'immagine

Risulta (senza sorprese forse) che lowerCamelCase è stato più spesso utilizzato per i nomi delle funzioni e period.separated nomi più spesso utilizzati per i parametri. Tuttavia, utilizzare UpperCamelCase, come sostenuto dalla guida di stile R di Google, è davvero raro ed è un po 'strano che sostengano l'utilizzo di quella convenzione di denominazione.

Il documento completo è qui:

http://journal.r-project.org/archive/2012-2/RJournal_2012-2_Baaaath.pdf


2
Come mai le percentuali non raggiungono il 100%?
e9t

10
@ e9t Perché un nome può corrispondere a molte convenzioni di denominazione. printcorrisponde a tutte le convenzioni tranne UpperCamel e .OTHER_style.
Rasmus Bååth

Sarebbe bello aggiornare questo documento.
Samuel-Rosa

34

Sottolineature fino in fondo! Contrariamente all'opinione popolare, ci sono un certo numero di funzioni in base R che usano trattini bassi. Corri grep("^[^\\.]*$", apropos("_"), value = T)a vederli tutti.

Uso lo stile di programmazione Hadley ufficiale ;)


1
È pulito! Non ero a conoscenza della funzione apropos prima. Questo restituisce 10 funzioni per me in R 2.9.0; Difficilmente direi che è un caso convincente. Qual è la tua motivazione per le sottolineature quando sono chiaramente in minoranza per R?
Shane

3
Beh, è ​​16 in R 2.10.0, quindi è un aumento del 60% per versione;) Mi piacciono principalmente perché mi ricordano Ruby; camelCase mi ricorda Java.
Hadley il

6
Hadley, il mio cuore dice di sostenere la tua ribellione ribelle, ma la mia testa dice di rispettare lo standard della comunità e di dire di sì a camelCase. :( Ma forse la coerenza con se stessi è tutto ciò che conta.
medriscoll

5

Mi piace camelCase quando il cammello fornisce effettivamente qualcosa di significativo, come il tipo di dati.

dfProfitLoss, dove df = dataframe

o

vdfMergedFiles (), dove la funzione accetta un vettore e sputa un dataframe

Anche se penso che _ aggiunga davvero alla leggibilità, sembra che ci siano troppi problemi con l'uso di.-_ O altri caratteri nei nomi. Soprattutto se lavori in più lingue.


3

Questo dipende dalle preferenze personali, ma seguo la guida allo stile di Google perché è coerente con lo stile del team principale. Devo ancora vedere un trattino basso in una variabile in base R.



2

Come altri hanno già detto, le sottolineature rovineranno molte persone. No, non è verboten ma non è nemmeno particolarmente comune.

Usare i punti come separatore diventa un po 'complicato con le classi S3 e simili.

Nella mia esperienza, sembra che molti dei muck ad alta muck di R preferiscano l'uso di camelCase, con alcuni punti e un'infarinatura di sottolineature.


1

Di solito rinomino le mie variabili usando una ix di trattini bassi e una maiuscola mista (camelCase). Le variabili semplici vengono denominate utilizzando trattini bassi, esempio:

PSOE_votes -> numero di voti per il PSOE (gruppo politico spagnolo).

PSOE_states -> Categorical, indica lo stato in cui vince il PSOE {Aragon, Andalucia, ...)

PSOE_political_force -> Categoriale, indica la posizione tra i gruppi politici del PSOE {primo, secondo, terzo)

PSOE_07 -> Union of PSOE_votes + PSOE_states + PSOE_political_force at 2007 (h eader -> votes, states, position )

Se la mia variabile è il risultato di una funzione applicata in una / due variabili, utilizzo una maiuscola mista.

Esempio:

positionXstates <- xtabs (~ states + position, PSOE_07)


0

Ho una preferenza per MixedCapitals.

Ma spesso uso i punti per indicare qual è il tipo di variabile:

mixedCapitals.mat è una matrice. mixedCapitals.lm è un modello lineare. mixedCapitals.lst è un oggetto elenco.

e così via.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.