0Pricing
R Academy · Lezione

Operatori di assegnazione e speciali

Esplori >, %in% e l'operatore pipe in R.

Operatori di assegnazione e speciali è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento R Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso R Academy include 4 lezioni in totale.

Assegnazione in R

R offre diversi modi per assegnare valori alle variabili. Il più idiomatico è <-, che rappresenta lo stile preferito. Incontrerà anche = per l'assegnazione, sebbene in alcuni contesti si comporti in modo leggermente diverso.

# Both assign a value, <- is preferred
name <- 'Alice'
age = 30
cat('Name:', name, '
')
cat('Age:', age, '
')

Freccia a sinistra <- e uguale =

<- crea sempre una variabile nell’ambiente corrente. Anche = può assegnare un valore, ma all’interno delle chiamate di funzione imposta argomenti denominati invece di creare una variabile. Questa distinzione è importante.

# <- creates a variable outside function calls
x <- 42

# = inside function call sets argument, does NOT create x
mean(x = c(1, 2, 3))  # x is an arg here, not a variable

# But <- inside a function call DOES create a variable
mean(y <- c(1, 2, 3))  # y is now also in workspace
cat('y was created:', y, '
')

Operatore di assegnazione a destra ->

R supporta anche l’assegnazione da sinistra a destra con ->. Assegna il valore a sinistra al nome a destra. Sebbene sia valido, nella pratica viene usato raramente perché riduce la leggibilità.

# Right assignment operator
100 -> max_score
'R Programming' -> course_name
cat('Max score:', max_score, '
')
cat('Course:', course_name, '
')

# Same as:
# max_score <- 100
# course_name <- 'R Programming'

Assegnazione globale con <<-

<<- assegna un valore a una variabile nell’ambiente genitore (contenitore), non nell’ambiente locale della funzione. Viene usato all’interno delle funzioni per modificare una variabile che esiste al di fuori della funzione.

counter <- 0

increment <- function() {
  counter <<- counter + 1  # modifies the global counter
}

increment()
increment()
increment()
cat('Counter after 3 increments:', counter, '
')

L’operatore di appartenenza %in%

%in% verifica se ciascun elemento a sinistra compare nel vettore a destra. Restituisce un vettore logico della stessa lunghezza dell’operando a sinistra. È il modo più chiaro per verificare l’appartenenza a un insieme in R.

fruits <- c('apple', 'banana', 'cherry', 'date', 'elderberry')

# Check membership
cat('Is mango in fruits?', 'mango' %in% fruits, '
')
cat('Is cherry in fruits?', 'cherry' %in% fruits, '
')

# Check multiple values at once
search <- c('banana', 'mango', 'date')
cat('Which are in fruits:', search %in% fruits, '
')

Filtrare con %in%

%in% è particolarmente potente quando viene usato per filtrare vettori o righe di data frame. Permette di selezionare gli elementi che appartengono a un insieme predefinito di valori consentiti.

countries <- c('USA', 'UK', 'Canada', 'Germany', 'France', 'Japan')
populations <- c(331, 67, 38, 83, 67, 126)  # millions

# Keep only G7 European members
g7_europe <- c('UK', 'Germany', 'France', 'Italy')
mask <- countries %in% g7_europe
cat('G7 Europe countries:', countries[mask], '
')
cat('Populations:', populations[mask], '
')

Moltiplicazione di matrici con %*%

%*% esegue una vera moltiplicazione di matrici (prodotto scalare), a differenza di *, che moltiplica elemento per elemento. Per due matrici A (m x n) e B (n x p), il risultato è una matrice (m x p).

A <- matrix(c(1, 2, 3, 4), nrow = 2, ncol = 2)
B <- matrix(c(5, 6, 7, 8), nrow = 2, ncol = 2)

cat('Matrix A:
')
print(A)
cat('Matrix B:
')
print(B)
cat('A %*% B (matrix mult):
')
print(A %*% B)
cat('A * B (element-wise):
')
print(A * B)

La pipe nativa |>

Introdotta in R 4.1, la pipe nativa |> passa il risultato dell’espressione a sinistra come primo argomento della funzione a destra. Rende molto più leggibili le catene di operazioni.

# Without pipe
result1 <- round(sqrt(abs(-16)), 2)
cat('Without pipe:', result1, '
')

# With native pipe |>
result2 <- -16 |> abs() |> sqrt() |> round(2)
cat('With pipe:', result2, '
')

# Reading left to right: take -16, get abs, sqrt, then round

Pipe con i vettori

La pipe nativa |> è particolarmente utile con i vettori e le operazioni numeriche. È possibile concatenare trasformazioni senza creare variabili intermedie, rendendo il codice più pulito e facile da seguire.

scores <- c(88, 45, 92, 61, 73, 55, 84, 79)

# Chain: keep passing scores, then compute mean
passing_mean <- scores |> \(x) x[x >= 60] |> mean()
cat('Mean of passing scores:', round(passing_mean, 2), '
')

# Another chain: sort, reverse, take top 3
top3 <- scores |> sort(decreasing = TRUE) |> head(3)
cat('Top 3 scores:', top3, '
')

Operatori infissi personalizzati

R permette di definire operatori infissi personalizzati usando la sintassi %name%. È così che pacchetti come dplyr definiscono la pipe %>%. È possibile crearne di propri per operazioni specifiche del dominio.

# Define a custom infix operator for 'not in'
'%notin%' <- function(x, table) !(x %in% table)

cities <- c('Paris', 'London', 'Berlin', 'Tokyo', 'Sydney')
exclude <- c('Tokyo', 'Sydney')

cat('Cities not in exclude list:', cities[cities %notin% exclude], '
')

Riferimento rapido agli operatori

Ecco un riepilogo degli operatori speciali trattati in questa lezione:

  • <- — assegnazione standard (preferita)
  • = — assegnazione (usata anche per gli argomenti delle funzioni)
  • <<- — assegnazione nell’ambiente globale/genitore
  • %in% — verifica dell’appartenenza
  • %*% — moltiplicazione di matrici
  • |> — pipe nativa (R 4.1+)
  • %name% — sintassi per operatori infissi personalizzati
# Demonstrate %in% as a filter
all_nums <- 1:20
special <- c(3, 6, 9, 12, 15, 18)
cat('Multiples of 3 up to 20:', all_nums[all_nums %in% special], '
')

# Demonstrate pipe
1:10 |> mean() |> cat('
')

Verifica rapida

Che cosa restituisce l’operatore %in% quando viene usato come c(2, 4, 6) %in% c(1, 2, 3)?

Riepilogo: operatori speciali

Ben fatto! Ecco i concetti principali di questa lezione:

  • Usi <- per l’assegnazione: è la convenzione di R
  • = funziona per l’assegnazione, ma all’interno delle chiamate di funzione è ambiguo
  • <<- modifica dall’interno di una funzione una variabile nell’ambiente genitore (globale)
  • %in% è il modo più chiaro per verificare l’appartenenza a un insieme in R
  • %*% esegue la moltiplicazione di matrici (non elemento per elemento)
  • La pipe nativa |> (R 4.1+) concatena le chiamate di funzione da sinistra a destra, rendendo il codice più leggibile
  • Gli operatori personalizzati seguono lo schema %name%
# Pipe + %in% combined
data <- c(5, 12, 3, 8, 15, 7, 20, 1)
valid_range <- 5:15

result <- data |> \(x) x[x %in% valid_range] |> sort()
cat('Values in range 5-15:', result, '
')

Domande Frequenti

La lezione «Operatori di assegnazione e speciali» è gratuita?

Sì — il testo completo di «Operatori di assegnazione e speciali» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso R Academy, passa a CoddyKit PRO. Il corso R Academy include 4 lezioni in totale.

Cosa imparerò in «Operatori di assegnazione e speciali»?

Esplori >, %in% e l'operatore pipe in R. Eserciti R Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare R Academy?

Non è richiesta alcuna esperienza precedente. R Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Operatori di assegnazione e speciali»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione R Academy?

Sì. Ogni lezione R Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Operatori aritmetici e di confronto
  2. Operatori logici e logica booleana
  3. Operatori di assegnazione e speciali
  4. Precedenza degli operatori ed espressioni complesse
← Torna a R Academy