Vectoren: Vectorrekening in R
Selectie van componenten en toewijzing van waarden
Selectie van componenten en deelvectoren Je kunt op verschillende manieren componenten van vectoren selecteren. We geven een paar voorbeelden, waaruit blijkt dat indexering begint bij 0 en er slimme manieren zijn om deelvectoren te creëren.
> v <- 6:10; v
[1] 6 7 8 9 10
> v[2] # een enkel element
[1] 7
> v[c(2,4)] # meerdere componenten
[1] 7 9
> v[2:4] # een deelvector
[1] 7 8 9
> v[2:length(v)] # alles behalve de eerste component
[1] 7 8 9 10
> v[-1] # alles behalve de eerste component
[1] 7 8 9 10
> v[1:length(v)-1] # alles behalve de laatste component
[1] 6 7 8 9
> v[-length(v)] # alles behalve de laatste component
[1] 6 7 8 9
Selectie via logische expressies Je kunt ook logische indexering (met TRUE en FALSE) gebruiken om componenten van vectoren te selecteren. Hiervoor heb je relationele operatoren nodig, zoals uit onderstaande tabel.
== | gelijk aan | != | niet gelijk aan |
< | kleiner dan | > | groter dan |
<= | kleiner dan of gelijk aan | >= | groter dan of gelijk aanl |
> v <- 5:10; v
[1] 5 6 7 8 9 10
> lv <- v>8; lv # vectorwaarden TRUE/FALSE als aan de voorwaarde wel/niet voldaan is
[1] FALSE FALSE FALSE FALSE TRUE TRUE
> v[lv] # selectie van componenten
[1] 9 10
> i <- (1:length(v))[v<8]; i # selectie van indices
[1] 1 2 3
> v[i] # selectie van componenten
[1] 5 6 7
Toewijzing Componenten waar je naar refereert kun je ook een waarde toewijzen.
> v <- 5:10; v
[1] 5 6 7 8 9 10
> v[1] <- 4; v # eerste component gelijk gesteld aan 4
[1] 4 6 7 8 9 10
> v[c(1,2)] <- 5; v # eerste 2 componenten gelijk gesteld aan 5
[1] 5 5 7 8 9 10 > v[-2] # tweede component verwijderd in resultaat, maar niet in de bron
[1] 5 7 8 9 10
> v
[1] 5 5 7 8 9 10
> v[1:length(v)] <- 1; v # alle componenten gelijk aan 1 gesteld
[1] 1 1 1 1 1 1
Door selectie of toewijzing kan je niet de structuur wijzigen. In onderstaand voorbeeld geven we de vector een extra component via de c
functie, maar die doet dit niet inline, d.w.z verandert de structuur van de gebruikte vector niet (daarvoor is een toewijzing nodig). Dit is overigens niet een aanbevolen manier om te werken. Het vooraf reserveren van voldoende ruimte voor componenten in een vector via de constructie van een nulvector en dan pas de data vector vullen met waarden door toewijzing is een betere manier om gegevens te verzamelen in R experimenten zoals bijvoorbeeld de reactietijden op stimuli.
> v <- 5:7; v # vector van lengte 3
[1] 5 6 7
> c(v, 8)
[1] 5 6 7 8
> v
[1] 5 6 7
> v <- c(v, 8); v # vector van lengte 4
[1] 5 6 7 8