Inleiding Programmeren + R

Vector

» Start

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