0Pricing
R Academy · Lezione

Indicizzazione e subset delle matrici

Acceda a righe, colonne ed elementi usando la notazione [row, col].

Indicizzazione e subset delle matrici è una lezione R Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Nozioni di base sull'indicizzazione delle matrici

Per accedere agli elementi di una matrice, usi la notazione m[row, col]. In R, gli indici di righe e colonne iniziano da 1. La virgola è obbligatoria: ometterla tratta la matrice come un vettore semplice.

m <- matrix(1:12, nrow = 3, ncol = 4)
cat('Full matrix:
')
print(m)

# Element at row 2, column 3
cat('m[2, 3] =', m[2, 3], '
')

# Element at row 1, column 4
cat('m[1, 4] =', m[1, 4], '
')

Estrarre una riga completa

Lasci vuoto l'indice della colonna per estrarre un'intera riga. Il risultato è un vettore (la dimensione della matrice viene rimossa). La virgola deve comunque essere presente.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')
print(scores)

# Extract Alice's row
alice_scores <- scores[1, ]
cat('Alice:', alice_scores, '
')
cat('Alice mean:', mean(alice_scores), '
')

Estrarre una colonna completa

Lasci vuoto l'indice della riga per estrarre un'intera colonna. Come per l'estrazione di una riga, il risultato è un vettore. La virgola che separa le posizioni di riga e colonna deve comunque essere presente.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')

# Extract the Math column
math_scores <- scores[, 1]
cat('Math scores:', math_scores, '
')
cat('Math mean:  ', mean(math_scores), '
')
cat('Math max:   ', max(math_scores), '
')

Selezionare più righe e colonne

Usi un vettore di indici per estrarre più righe o colonne contemporaneamente. Il risultato è una sottomatrice (ancora una matrice, non un vettore), che mantiene la struttura bidimensionale.

m <- matrix(1:16, nrow = 4, ncol = 4)
cat('Original 4x4:
')
print(m)

# Extract rows 1,3 and columns 2,4
sub_m <- m[c(1, 3), c(2, 4)]
cat('Submatrix rows 1,3 cols 2,4:
')
print(sub_m)
cat('Class:', class(sub_m), '
')

Accedere tramite il nome della riga o della colonna

Se una matrice ha nomi per righe e colonne, può indicizzare tramite il nome invece che tramite la posizione. Il codice risulta più leggibile e rimane più robusto quando le righe o le colonne vengono riordinate.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE,
                 dimnames = list(
                   c('Alice', 'Bob', 'Carol'),
                   c('Math', 'Sci', 'Eng', 'Hist')
                 ))

# Access by name
cat('Bob Science:', scores['Bob', 'Sci'], '
')
cat('Carol row:
')
print(scores['Carol', ])
cat('English column:
')
print(scores[, 'Eng'])

Indicizzazione logica delle matrici

Può usare un vettore logico (o una matrice logica) per selezionare gli elementi. Quando usa un vettore logico in una dimensione, questo seleziona le righe o le colonne per cui il valore è TRUE.

scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')

# Select students with mean score >= 85
row_means <- rowMeans(scores)
high_achievers <- scores[row_means >= 85, ]
cat('High achievers (mean >= 85):
')
print(high_achievers)

Indicizzazione negativa — escludere righe o colonne

Anteponendo - a un indice, può escludere la riga o la colonna corrispondente. È un modo semplice per eliminare righe o colonne specifiche senza dover elencare tutte quelle da mantenere.

m <- matrix(1:12, nrow = 3, ncol = 4, byrow = TRUE)
cat('Original:
')
print(m)

# Drop row 2
cat('Without row 2:
')
print(m[-2, ])

# Drop columns 1 and 3
cat('Without cols 1 and 3:
')
print(m[, c(-1, -3)])

Singolo elemento con drop = FALSE

Per impostazione predefinita, l'estrazione di una singola riga o colonna elimina la dimensione e restituisce un vettore. Usi drop = FALSE per mantenere il risultato come matrice, preservando la struttura di righe e colonne.

m <- matrix(1:9, nrow = 3, ncol = 3)

# Default: drops to vector
row1_vector <- m[1, ]
cat('m[1,] class:', class(row1_vector), '
')  # numeric (vector)

# drop = FALSE: keeps as 1-row matrix
row1_matrix <- m[1, , drop = FALSE]
cat('m[1,,drop=FALSE] class:', class(row1_matrix), '
')
cat('Dimensions:', dim(row1_matrix), '
')

Sostituire valori tramite indice

Può modificare elementi specifici combinando l'indicizzazione con l'assegnazione. Questa tecnica funziona per singoli elementi, righe intere, colonne intere o sottomatrici.

m <- matrix(0, nrow = 4, ncol = 4)
cat('Zero matrix:
')
print(m)

# Set diagonal to 5
for (i in 1:4) m[i, i] <- 5
cat('After setting diagonal:
')
print(m)

# Replace entire row 2
m[2, ] <- c(1, 2, 3, 4)
cat('After replacing row 2:
')
print(m)

Indicizzazione lineare (semplice)

Internamente, una matrice viene memorizzata come un vettore semplice, colonna per colonna. Può accedere agli elementi usando un singolo indice intero secondo quest'ordine. Questo può essere utile in alcune operazioni su grandi quantità di dati.

m <- matrix(c(10,20,30,40,50,60), nrow = 2, ncol = 3)
cat('Matrix:
')
print(m)

# Flat indices: column by column
cat('m[1] =', m[1], '(row 1, col 1)
')
cat('m[3] =', m[3], '(row 1, col 2)
')
cat('m[5] =', m[5], '(row 1, col 3)
')

# Replace flat index 4
m[4] <- 99
print(m)

Riepilogo dell'indicizzazione

Riferimento rapido per l'indicizzazione delle matrici in R:

  • m[r, c] — singolo elemento alla riga r e colonna c
  • m[r, ] — intera riga r
  • m[, c] — intera colonna c
  • m[c(r1,r2), c(c1,c2)] — sottomatrice
  • m['name', 'name'] — accesso tramite dimname
  • m[-r, ] — esclude la riga r
  • m[logical_vec, ] — selezione logica delle righe
  • m[r, , drop=FALSE] — mantiene il risultato come matrice
m <- matrix(c(5,10,15,20,25,30), nrow = 2, ncol = 3)
cat('m[1,2] =', m[1,2], '
')
cat('m[2,]  =', m[2,], '
')
cat('m[,3]  =', m[,3], '
')
cat('m[-1,] :
'); print(m[-1, ])

Verifica rapida

Che cosa restituisce m[-2, ] per una matrice m con 3 righe?

Riepilogo: indicizzazione delle matrici

Ottimo lavoro! Ecco i concetti chiave di questa lezione:

  • m[r, c] usa prima la riga e poi la colonna: entrambe le posizioni sono separate da una virgola
  • Lasci vuoto un lato (m[r, ] o m[, c]) per estrarre intere righe o colonne
  • Gli indici negativi escludono righe o colonne
  • I vettori logici possono filtrare righe o colonne
  • Le dimensioni con nome consentono di indicizzare tramite il nome, migliorando la leggibilità
  • drop = FALSE impedisce la perdita della dimensione durante l'estrazione di singole righe o colonne
# Practical: find best student per subject
scores <- matrix(c(88,92,75,81, 79,85,90,73, 95,78,82,88),
                 nrow = 3, byrow = TRUE)
rownames(scores) <- c('Alice', 'Bob', 'Carol')
colnames(scores) <- c('Math', 'Sci', 'Eng', 'Hist')

for (subj in colnames(scores)) {
  best <- rownames(scores)[which.max(scores[, subj])]
  cat('Best in', subj, ':', best, '
')
}

Domande Frequenti

La lezione «Indicizzazione e subset delle matrici» è gratuita?

Sì — il testo completo di «Indicizzazione e subset delle matrici» è 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 «Indicizzazione e subset delle matrici»?

Acceda a righe, colonne ed elementi usando la notazione [row, col]. 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 2 di 4.

Quanto tempo richiede la lezione «Indicizzazione e subset delle matrici»?

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. Creazione di matrici con matrix()
  2. Indicizzazione e subset delle matrici
  3. Aritmetica e operazioni sulle matrici
  4. Trasposizione e rimodellazione delle matrici
← Torna a R Academy