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,functione 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_caseper variabili e funzioni:retry_count,fit_model.- I punti nei nomi sono validi ma datati: R base è pieno di nomi dell'epoca di
data.framecomemy.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
camelCasenei 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 <- valuecrea una variabile; la comunità riserva=agli argomenti delle funzioni.->eassign()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_casee 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.