Indicizzazione delle matrici
Fa parte della sezione Logica e flusso del percorso R di Coddy. Lezione 18 di 64.
m[i, j] è il valore nella riga i e nella colonna j. Lascia un lato vuoto per selezionare un'intera riga o colonna: m[i, ] è la riga i e m[, j] è la colonna j.
m <- matrix(1:6, nrow = 2, byrow = TRUE)
print(m[2, 3])
print(m[1, ])
print(m[, 2])Output:
[1] 6
[1] 1 2 3
[1] 2 5Gli stessi indici funzionano a sinistra di <-, quindi è possibile sostituire una cella, una riga o una colonna:
m <- matrix(0, nrow = 2, ncol = 3)
m[1, 2] <- 5
m[2, ] <- c(7, 8, 9)
print(m)Output:
[,1] [,2] [,3]
[1,] 0 5 0
[2,] 7 8 9Le righe e le colonne possono avere dei nomi, impostati con rownames() e colnames(). In questo modo, un nome funziona come indice:
sales <- matrix(c(3, 5, 2, 8), nrow = 2, byrow = TRUE)
rownames(sales) <- c("north", "south")
colnames(sales) <- c("jan", "feb")
print(sales["south", "feb"])
print(sales[, "jan"])Output:
[1] 8
north south
3 2 I vettori di indici selezionano contemporaneamente un blocco di righe e colonne:
m <- matrix(1:9, nrow = 3, byrow = TRUE)
print(m[1:2, 2:3])
print(m[c(1, 3), 1])Output:
[,1] [,2]
[1,] 2 3
[2,] 5 6
[1] 1 7Sfida
FacileCompleta cell_report(m, r, c). Restituisci tre righe: Cell: con il valore nella riga r e nella colonna c, Row: con i valori della riga r e Column: con i valori della colonna c. Separa i valori con singoli spazi.
Il codice fornito legge una matrice da una riga: le righe sono separate da ; e i valori di una riga da ,, quindi 1,2;3,4 è una matrice con le righe 1 2 e 3 4. Le due righe successive contengono r e c. Il codice stampa ogni riga restituita.
Provalo tu
cell_report <- function(m, r, c) {
# Scrivi qui il tuo codice
c("Cell: ", "Row: ", "Column: ")
}
# Codice di input/output fornito: lascialo così com'è
input <- suppressWarnings(readLines(file("stdin")))
parse_matrix <- function(line) {
rows <- strsplit(line, ";")[[1]]
matrix(as.numeric(unlist(strsplit(rows, ","))), nrow = length(rows), byrow = TRUE)
}
cat(cell_report(parse_matrix(input[1]), as.numeric(input[2]), as.numeric(input[3])), sep = "\n")
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Le stringhe in dettaglio
Sottostringhe con substr()Formattazione con sprintf()Dividere e unireRicerca nelle stringheSostituzione del testoRipasso - Generatore di nomi utente4Matrici
Creazione di matriciIndicizzazione delle matriciRiepiloghi di righe e colonneOperazioni aritmetiche con le matriciRipasso - Schema dei posti a sedere10Flusso di controllo avanzato
La funzione switch()ifelse() vettorialerepeat e breakFunzioni ricorsiveRiepilogo - Classificatore di voti2Ricerche chiave-valore
Ricerche in vettori con nomiControllare le chiaviAggiungere e rimuovere chiaviIterare sui nomiRiepilogo - Sportello titoli5Progetto - Registro dei voti
Aggiungere studentiRegistrare i voti8Ordinamento e raggruppamento
Ordinare i vettoriOrdinare in base a una chiaveRaggruppare con split()Riepiloghi dei gruppiRipasso - Classifica3Insiemi e conteggio
Valori univociOperazioni sugli insiemiTest di appartenenzaConteggio con table()Riepilogo - Ospiti dell’evento6Le funzioni come valori
Funzioni anonimePassare funzioniRestituire funzioniClosure con statoRiepilogo - Regole di sconto9DataFrame
Creare DataFrameColonne e righeFiltrare le righeAggiungere e ordinareRiepilogo - Report delle vendite12Progetto - Gestione delle spese
Registrare le speseSpesa totaleEsercitati da solo: Compilatore R online