Matriseindeksering og utvalg
Hent rader, kolonner og elementer ved hjelp av notasjonen [row, col].
Matriseindeksering og utvalg er en gratis leksjon i R Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i R Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i R Academy inneholder totalt 4 leksjoner.
Grunnleggende matriseindeksering
For å få tilgang til elementer i en matrise bruker De notasjonen m[row, col]. Rad- og kolonneindekser starter på 1 i R. Kommaet er påkrevd — hvis det utelates, behandles matrisen som en flat vektor.
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], '
')Hente ut en hel rad
La kolonneindeksen stå tom for å hente ut en hel rad. Resultatet er en vektor (matrisens dimensjon fjernes). Kommaet må fortsatt være med.
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), '
')Hente ut en hel kolonne
La radindeksen stå tom for å hente ut en hel kolonne. Som ved uthenting av rader er resultatet en vektor. Kommaet som skiller rad- og kolonneposisjonene, må fortsatt være med.
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), '
')Velge ut flere rader og kolonner
Bruk en vektor med indekser for å hente ut flere rader eller kolonner samtidig. Resultatet er en delmatrise (fortsatt en matrise, ikke en vektor), og den todimensjonale strukturen bevares.
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), '
')Tilgang via rad- eller kolonnenavn
Hvis en matrise har rad- og kolonnenavn, kan De indeksere etter navn i stedet for posisjon. Dette er mer lesbart og tåler bedre at rader eller kolonner omorganiseres.
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'])Logisk indeksering av matriser
De kan bruke en logisk vektor (eller logisk matrise) til å velge ut elementer. Når en logisk vektor brukes i én dimensjon, velger den rader eller kolonner der verdien er 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)Negativ indeksering — utelate rader eller kolonner
Sett - foran en indeks for å utelate den aktuelle raden eller kolonnen. Dette er en ryddig måte å fjerne bestemte rader eller kolonner på uten å måtte liste opp alle de andre som skal beholdes.
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)])Enkelt element med drop = FALSE
Som standard fjernes dimensjonen når De henter ut en enkelt rad eller kolonne (det returneres en vektor). Bruk drop = FALSE for å beholde resultatet som en matrise (slik at rad- og kolonnestrukturen bevares).
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), '
')Erstatte verdier med indekser
De kan endre bestemte elementer ved å kombinere indeksering med tilordning. Dette fungerer for enkeltelementer, hele rader, hele kolonner eller delmatriser.
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)Lineær (flat) indeksering
En matrise lagres internt som en flat vektor (kolonne for kolonne). De kan få tilgang til elementer med én heltallsindeks i denne flate rekkefølgen. Dette kan være nyttig for masseoperasjoner.
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)Oppsummering av indeksering
Hurtigreferanse for matriseindeksering i R:
m[r, c]— enkeltelementet i rad r, kolonne cm[r, ]— hele rad rm[, c]— hele kolonne cm[c(r1,r2), c(c1,c2)]— delmatrisem['name', 'name']— tilgang via dimensjonsnavnm[-r, ]— utelat rad rm[logical_vec, ]— logisk utvelging av raderm[r, , drop=FALSE]— behold som matrise
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, ])Kort kontroll
Hva returnerer m[-2, ] for en matrise m med 3 rader?
Oppsummering: Matriseindeksering
Godt jobbet! Dette er de viktigste punktene fra leksjonen:
m[r, c]bruker først rad og deretter kolonne — begge posisjonene skilles med komma- La den ene siden stå tom (
m[r, ]ellerm[, c]) for å hente ut hele rader eller kolonner - Negative indekser utelater rader eller kolonner
- Logiske vektorer kan filtrere rader eller kolonner
- Navngitte dimensjoner gjør det mulig å indeksere etter navn, noe som gir bedre lesbarhet
drop = FALSEhindrer at dimensjonen går tapt når enkeltstående rader eller kolonner hentes ut
# 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, '
')
}Lær deg R med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 43
- Leksjoner
- 159
Ofte stilte spørsmål
Er leksjonen «Matriseindeksering og utvalg» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien R Academy, inkludert «Matriseindeksering og utvalg», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i R Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Matriseindeksering og utvalg»?
Hent rader, kolonner og elementer ved hjelp av notasjonen [row, col]. Du øver på R Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med R Academy?
Ingen tidligere erfaring er nødvendig. R Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Matriseindeksering og utvalg»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne R Academy-leksjonen?
Ja. Alle R Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Opprette matriser med matrix()
- Matriseindeksering og utvalg
- Matrisearitmetikk og operasjoner
- Transponering og omforming av matriser