Vector
Voor het maken van een vector maken we gebruik van de functie c [c = 'Combine Values into a Vector or List'] of van de functie seq [seq = 'Sequence Generation'], of van de functie rep [rep = 'Replicate Elements of Vectors and Lists'].
> help(vector)
> help(c)
> help(seq)
> help(rep)
Probeer de volgende voorbeelden:
> x <- 1,3,2,6,0
Error: syntax error # zo werkt het dus niet !!!
> x <- c(1,3,2,6,0)
> x
[1] 1 3 2 6 0
> x <- seq(1, 20, by = 3)
> x
[1] 1 4 7 10 13 16 19
> x <- seq(10, 1, by = -2)
> x
[1] 10 8 6 4 2
> x <- 1:10
> x
[1] 1 2 3 4 5 6 7 8 9 10
> y <- 2.2:5.2
[1] 2.2 3.2 4.2 5.2
> x <- rep(3,10)
> x
[1] 3 3 3 3 3 3 3 3 3 3
> x <- rep(c(5,7), 2)
[1] 5 7 5 7
> x <- rep(3:5, 1:3)
[1] 3 4 4 5 5 5
We kunnen ook makkelijk getallen aan de vector x toevoegen:
> v <- c(x,6,9,3)
> v
[1] 1 2 3 4 5 6 7 8 9 10 6 9 3
> z <- c(x,y)
> z
[1] 1 2 3 4 5 6 7 8 9 10 2.2 3.2 4.2 5.2
Een numerieke vector ter lengte n kun je maken met de functie numeric.
> x <- numeric(5)
> x
[1] 0 0 0 0 0
Vectoren hebben de eigenschap lengte die vertelt hoeveel objecten deel uitmaken van de vector. Met behulp van de functie length kunnen we aan R vragen wat de lengte van een bepaalde vector is:
> x <- 1:10
> length(x)
[1] 10
We kunnen rekenen met vectoren:
> y <- 3*x - 12
> y
[1] -9 -6 -3 0 3 6 9 12 15 18
> 3:5 - 1:6
[1] 2 2 2 -1 -1 -1 # 3-1, 4-2, 5-3, 3-4, 4-5, 5-6
> z <- (y<0)
> z
[1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Een logische vector, zoals z in bovenstaand voorbeeld, is permanent in een numerieke vector te veranderen met de functie mode.
> mode(y) <- "numeric"
> y
[1] 1 1 1 0 0 0 0 0 0 0
En andersom kan natuurlijk ook:
> mode(y) <- "logical"
> y
[1] TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Een vector kan op grootte gesorteerd worden met behulp van sort.
> x <- c(2, 6, 4, 5, 5, 8, 8, 1, 3, 0)
> length(x)
[1] 10
> sort(x)
[1] 0 1 2 3 4 5 5 6 8 8
Met order krijg je de permutatie-index die nodig is om de vector op grootte gesorteerd te krijgen.
Deze kan worden gebruikt om een tweede vector met een eerste te permuteren.
> order(x)
[1] 10 8 1 9 3 4 5 2 6 7
> y <- c(3, 6, 5, 7, 3, 5, 8, 0, 9, 12)
> y
[1] 3 6 5 7 3 5 8 0 9 12
> y[order(x)]
[1] 12 0 3 9 5 7 3 6 5 8
De functie rev draait de volgorde van de coordinaten van een vector om. Derhalve is
rev(sort(x)) de vector van order statistics in dalende volgorde.
> rev(sort(x))
[1] 8 8 6 5 5 4 3 2 1 0
> rev(x)
[1] 0 3 1 8 8 5 5 4 6 2
De functie rank(x) geeft de rangnummers van x. In het geval van ties in x worden
gemiddelde rangnummers gegeven, zoals gebruikelijk in de statistiek.
> rank(x)
[1] 3.0 8.0 5.0 6.5 6.5 9.5 9.5 2.0 4.0 1.0
Met behulp van de functie duplicated kunnen we in een vector de elementen vinden die meer dan 1 keer voorkomen:
> x <- c(3,4,3,2,3,4,6,5,6,6,7,7,6,5,5,5,4)
> duplicated(x)
[1] FALSE FALSE TRUE FALSE TRUE TRUE FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
Met de functie unique kunnen die duplicaten vervolgens worden verwijderd:
> unique(x)
[1] 3 4 2 6 5 7
Rekenen met vectoren gaat meestal elementsgewijs, maar soms niet. Vergelijk:
> x*y
[1] -9 -12 -9 0 15 36 63 96 135 180
> x%*%y
[,1]
[1,] 495
De notatie x%*%y geeft het inproduct van de vectoren x en y.
> help("%*%")
Wat gebeurt er als je een vector probeert te maken waarin tekst en getallen door elkaar worden gebruikt?
> probeer <- c(23, 'hallo', 34, 567, 'goede morgen', 123465)
> probeer
[1] ???
Dat werkt dus niet. Alle elementen blijken na deze operatie tot het type "character" te behoren. Voor dat doel, het mengen van zowel numerieke als karakter elementen is de lijst uitgevonden.
>> Indexeren