Menu

Variabili e assegnazione in R: <-, = e assign()

Come creare variabili in R con la freccia <-, quando serve invece =, le regole per i nomi e come elencare e rimuovere variabili con ls() e rm().

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Come creare una variabile in R

Una variabile in R è un nome collegato a un valore. La crei con la freccia di assegnazione <-: il nome va prima della freccia, il valore dopo.

Tre variabili, tre tipi di valore diversi e nessuna dichiarazione di tipo da nessuna parte: R deduce il tipo dal valore stesso (ne parliamo in tipi di dati). Una volta che una variabile esiste, la usi ovunque useresti il valore:

La riassegnazione funziona allo stesso modo. Una variabile passa tranquillamente a un nuovo valore, perfino a un nuovo tipo, nel momento in cui assegni di nuovo:

R non si è lamentato del fatto che una stringa sia diventata un numero. Questa flessibilità è comoda, ma se il significato di una variabile cambia a metà script, di solito è il segnale che conviene scegliere un nuovo nome.

Perché R usa <- invece di =

Ecco la domanda che fanno tutti: anche age = 30 funziona, quindi perché ogni libro su R, ogni guida di stile e ogni pacchetto usano la freccia?

Perché in R = è due cose diverse a seconda di dove compare. Al livello principale assegna. Dentro una chiamata di funzione abbina un argomento per nome, e non crea una variabile:

Se provassi mean(values, na.rm <- TRUE) creeresti per sbaglio una variabile globale chiamata na.rm e passeresti TRUE per posizione: consentito, sbagliato e difficile da notare. La convenzione che mantiene tutto leggibile è semplice:

  • <- significa sempre assegnazione.
  • = significa sempre "questo argomento riceve questo valore" dentro la chiamata a una funzione.

Rispetta questa divisione e ogni riga di R che leggi ti dirà a colpo d'occhio se qualcosa viene creato o passato. È la regola di stile più universale del mondo R: RStudio dà perfino a <- una scorciatoia da tastiera tutta sua (Alt+-).

I cugini poco usati: ->, = e assign()

R ha altri due modi di assegnare, che vale la pena riconoscere anche se li scriverai di rado.

La freccia rovesciata -> assegna nella direzione opposta, prima il valore e poi il nome:

Ogni tanto la vedrai alla fine di una lunga pipeline ("calcola tutto questo, poi salvalo"), ma la maggior parte delle guide di stile consiglia di evitarla: chi legge cerca all'inizio della riga il nome che viene definito.

assign() crea una variabile a partire da una stringa, il che significa che il nome si può costruire durante l'esecuzione:

Sembra furbo ed è quasi sempre lo strumento sbagliato: un insieme di variabili numerate è in realtà un vettore o una lista travestiti. Usa assign() solo quando un nome deve davvero essere calcolato; la sua controparte get("score") legge una variabile a partire dal nome in forma di stringa.

Regole per i nomi

R accetta nomi che:

  • Contengono lettere, cifre, punti (.) e trattini bassi (_).
  • Iniziano con una lettera, oppure con un punto non seguito da una cifra.
  • Non sono parole riservate (if, for, TRUE, NULL, function e poche altre).

Quindi questi sono tutti validi:

E questi no:

  • 2nd_user: non può iniziare con una cifra.
  • _temp: non può iniziare nemmeno con un trattino basso (a differenza di Python).
  • user-name: il trattino è una sottrazione, non un carattere dei nomi.
  • TRUE: parola riservata.

I nomi distinguono tra maiuscole e minuscole: total, Total e TOTAL sono tre variabili senza alcun legame, e R non ti avvisa quando ne crei una per un refuso.

Elencare e rimuovere: ls() e rm()

Ogni variabile che crei finisce nel workspace (l'ambiente globale). ls() elenca quello che c'è e rm() rimuove le cose:

Due dettagli da conoscere. Primo, rm(list = ls()) cancella l'intero workspace: comodo all'inizio di una sessione esplorativa, distruttivo in qualsiasi altro momento. Secondo, i nomi che iniziano con un punto (come .cache) sono nascosti a ls() a meno che tu non chiami ls(all.names = TRUE): è la stessa convenzione dei file nascosti su Unix.

Convenzioni per i nomi: usa lo snake_case

Oltre alle regole rigide, la comunità R moderna (e la guida di stile del tidyverse) ha adottato delle convenzioni:

  • lower_snake_case per variabili e funzioni: retry_count, fit_model.
  • I punti nei nomi sono validi ma datati: R base è pieno di nomi dell'epoca di data.frame come my.data, ma i punti hanno un significato anche nel sistema di metodi S3 di R (print.data.frame è "il metodo print per i data frame"), quindi il codice nuovo li evita.
  • Niente prefissi ungheresi, niente camelCase: vedrai camelCase nei pacchetti più vecchi, ma l'ecosistema ha scelto lo snake_case.
  • R non ha vere costanti; la convenzione è scrivere in maiuscolo i nomi di quelle che vorrebbero essere costanti (MAX_RETRIES <- 5) e semplicemente non riassegnarle.

Scegli nomi descrittivi e sii coerente. avg_score costa quattro tasti in più di as e risparmia a ogni futuro lettore un viaggio a ritroso nello script.

Cosa ti porti a casa

  • name <- value crea una variabile; la comunità riserva = agli argomenti delle funzioni.
  • -> e assign() esistono; ti capiterà di leggerli più spesso di quanto dovresti scriverli.
  • I nomi usano lettere, cifre, punti e trattini bassi; non possono iniziare con una cifra o un trattino basso e distinguono tra maiuscole e minuscole.
  • ls() mostra il workspace, rm() lo ripulisce.
  • Scrivi in snake_case e il tuo codice somiglierà all'R che scrivono tutti oggi.

Prossimo passo: che tipo di valori contengono davvero queste variabili, cioè numeric, integer, character e logical.

Domande frequenti

Come si crea una variabile in R?

Scrivi il nome, la freccia di assegnazione <- e il valore: age <- 30. R ricava il tipo dal valore, non c'è alcuna dichiarazione. Anche age = 30 funziona al livello principale, ma la convenzione della comunità è <-.

Qual è la differenza tra <- e = in R?

Al livello principale di uno script fanno la stessa cosa. Dentro una chiamata di funzione no: mean(x, na.rm = TRUE) usa = per abbinare un argomento per nome, non per creare una variabile. Dato che = svolge entrambi i ruoli a seconda del contesto, le guide di stile di R riservano <- all'assegnazione e = agli argomenti.

Come si elimina una variabile in R?

rm(x) rimuove la variabile x dal workspace. rm(list = ls()) rimuove tutto: utile per ripartire da zero, pericoloso nel mezzo di un'analisi. ls() elenca quello che esiste al momento.

I nomi delle variabili in R possono contenere punti?

Sì: my.data è un nome perfettamente valido, e il codice R più vecchio usa i punti ovunque. Lo stile moderno preferisce il trattino basso (my_data) perché i punti hanno un significato anche nel sistema di metodi S3 di R, e questo rende ambigui da leggere i nomi con i punti.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA