Basisvaardigheden in R: Werken met datastructuren
Vector
Wat is een vector in R? Je kan meer dan één waarde in een variabele opslaan. Je kan bijvoorbeeld een variabele maken met de naam "leeftijden_van_vrienden" en een rij numerieke waarden in deze variabele opslaan. Een variabele die een rij waarden van hetzelfde datatype bevat, wordt een vector genoemd. Je kan numerieke vectoren, letter vectoren en logische vectoren maken.
Creatie van een vector in R
Uitleg
Je maakt een vector met de functie c()
(c is een afkorting van combine). Tussen haakjes vermeld je de waarden die je in de vector wilt hebben, gescheiden door een komma.
Vergeet niet om de nieuwe variabele een naam te geven en daarvoor een reeks basisobjecten in te voeren. Zonder argument in c()
geef je alleen aan dat je een vectorobject maakt. Bekijk het voorbeeld om te zien hoe je dit kunt doen.
Er zijn ook speciale instructies om specifieke vectoren te maken. Met v1 <- 2:4
wordt bijvoorbeeld de vector \((2,3,4)\) gemaakt. v2 <- seq(from=3, to=10, by=2)
creëert de vector \((3,5,7,9)\).
In simulaties zullen we veel gebruik maken van vectoren met willekeurig gegenereerde getallen, in het Engels random numbers genoemd. Hiervoor zijn verschillende instructies:
runif() |
willekeurige getallen via een uniforme distributie |
sample() |
willekeurige objecten uit een vector |
rnorm() |
willekeurige getallen via een normale verdeling |
Voorbeeldscript
# maak een numerieke vector
num_vector <- c(20, 19, 21, 19)
print(num_vector)
# uitvoer: 20, 19, 21, 19
# maak een letter vector
char_vector <- c("Skye", "Leopold", "Jemma")
print(char_vector)
# uitvoer: "Skye" "Leopold" "Jemma"
# maak een logische vector
logical_vector <- c(T, F, T, T)
print(logical_vector)
# uitvoer: TRUE FALSE TRUE TRUE
# maak een vector met 3 willekeurige\(\phantom{x)}\)
# getallen tussen 0 en 1runif(3, min=0, max=1)
# uitvoer: ziet er uit als
#[1] 0.4422001 0.7989248 0.1218993
# 3 willekeurige getrokken getallen
# via de standaard normaalverdeling
rnorm(3)
# uitvoer: ziet er uit als
#[1] -0.4721671 1.7665132 0.8769968
Rekenen met vectoren in R
Uitleg
Net als bij variabelen waarin slechts één waarde is opgeslagen, kun je met vectoren rekenen. Wanneer je vectoren optelt, aftrekt, vermenigvuldigt of deelt, zal R de berekening uitvoeren voor componenten op dezelfde positie. Zie het eerste voorbeeld van "vijf optellen" aan de rechterkant.
Maar wat als je bij elk element van de vector verschillende getallen wilt optellen? Stel dat je bijvoorbeeld de vector v1 <- c(1,2,3)
hebt en 2 wilt optellen bij de eerste component, 6 bij het tweede, en 4 aan de derde component. Je kan dit realiseren door een andere vector te maken en deze vector bij de oorspronkelijke vector op te tellen. Kijk eens naar het tweede voorbeeld aan de rechterkant om een idee te krijgen.
Voorbeeldscript
# Rekenen met één numerieke vector\(\phantom{x}\)
# maak een numerieke vector
v1 <- c(1, 2, 3)
# tel 5 bij elke component van de vector op
v1 + 5
# uitvoer: 6, 7, 8
# vermenigvuldig de vector met 2
print(v1*2)
# uitvoer: 2, 4, 6
# Rekenen met twee vectoren
# maak twee numerieke vectoren
v1 <- c(1, 2, 3)
v2 <- c(4, 5, 6)
# tel de twee vectoren bij elkaar op
opgetelde_vectoren <- v1 + v2
print(opgetelde_vectoren)
# uitvoer: 5 7 9
# vermenigvuldig componentsgewijs
vermenigvuldigde_vectoren <- v1 * v2
print(vermenigvuldigde_vectoren)
# uitvoer: 4 10 18
Componenten van vectoren selecteren en waarden toewijzen
Uitleg
Vectoren zijn indexeerbare en veranderlijke objecten. Dit betekent dat componenten van een vector (ook wel elementen genoemd) toegankelijk zijn via een positionele index en dat je een vector ook kunt wijzigen door een waarde aan een enkele component toe te kennen. Het indexeren begint bij 1 en er zijn slimme methoden om vectoren te maken. Kijk naar de eerste interactieve voorbeeldsessie rechts voor de selectie van componenten.
Misschien wil je R vragen om je alle waarden in een vector te geven die aan een bepaalde voorwaarde voldoen. Stel dat je bijvoorbeeld alle waarden in een vector wilt zien die groter zijn dan een bepaalde waarde. Dat doe je door aan R de naam van de vector te geven en daarin, tussen vierkante haken, de voorwaarde op te nemen waaraan waarden moeten voldoen.
In feite gebruik je dan logische indexering (met waarden TRUE en FALSE) om componenten van vectoren te selecteren. Hiervoor heb je relationele operatoren nodig, zoalsin onderstaande tabel.
== |
gelijk aan |
< |
kleiner dan |
> |
groter dan |
<= |
kleiner dan of gelijk aan |
>= |
groter dan of gelijk aan |
!= |
niet gelijk aan |
Je kunt ook meerdere logische expressies combineren. Logische voegwoorden worden hieronder vermeld.
& of && |
en |
| of || |
of |
xor() |
exclusief of |
! |
niet (logische ontkenning) |
De tweede interactieve voorbeeldsessie aan de rechterkant toont een voorbeeld van een selectie van componenten van een vector via logische expressies.
Ook componenten waarnaar je verwijst, kunnen nieuwe waarden krijgen. Door 'in-line' toewijzingen kun je de structuur van de vector niet veranderen. Bekijk de derde interactieve voorbeeldsessie rechts en ontdek hoe je componenten van een vector kunt toewijzen.
Voorbeeldsessies
Sessie 1
![sessie1 sessie1](/images/uploads/theory/17057/sessie1.png)
Sessie 2
![sessie2 sessie2](/images/uploads/theory/17057/sessie2.png)
Sessie 3
![sessie3 sessie3](/images/uploads/theory/17057/sessie3.png)
Elementen in een vector ordenen
Uitleg
Om de waarden van de laagste naar de hoogste waarde te sorteren, kan je de functie sort()
gebruiken. Om van hoog naar laag te sorteren, kan je de optie decreasing = TRUE
opnemen bij gebruik van de functie sort()
, of eerst de vector sorteren met behulp van sort()
en vervolgens de gesorteerde vector omkeren met behulp van de functie rev()
.
Misschien zou het een nuttiger taak zijn om één vector te sorteren op basis van de waarden van een andere vector. Hiervoor gebruik je de functie order()
in combinatie met selectie via []
.
Bekijk hiernaast de interactieve voorbeeldsessies.
Voorbeeldsessies
![sessie 4 session 4](/images/uploads/theory/17057/session4.png)
![sessie 5 sessie 5](/images/uploads/theory/17057/sessie5.png)