2.3 Vektorer

Vektorer i R er bare en række tal (eller andre slags værdier). De kan gemmes under et navn, præcis som man gemmer enkelte tal. Vektorer fås tit som resultat af funktioner. På den anden side tager mange funktioner også vektorer som argument. For eksempel beregner funktionen sum summen af alle indgange i en vektor.

2.3.1 Brugerdefinerede vektorer

I R kan vi selv definere en vilkårlig vektor ved at bruge funktionen c (combine). Denne funktion tager så mange argumenter som man vil, og kombinerer dem i givet rækkefølge i en vektor. Man kan også kombinere vektorer som er gemt i en variabel.

a <- c(3, -10, 17)
a
## [1]   3 -10  17
a2 <- c(5, 6, 7, 8, 9, 10)
b <- c(a, a2)
b
## [1]   3 -10  17   5   6   7   8   9  10
sum(b)
## [1] 55

Tit har man brug for en sekvens af heltal. Til dette findes en smart shortcut i R: startværdi:slutværdi. Frem for a2 <- c(5, 6, 7, 8, 9, 10) kunne vi have skrevet a2 <- 5:10. Og frem for b <- c(a, a2) kunne vi endda have sparet os at definere variablen a2 ved at skrive

b <- c(a, 5 : 10)

Nu forestår vi også, hvorfor R altid skriver [1] i starten af en linje med output: derved prøver det at hjælpe os, at bevare overblikket over lange vektorer. Prøv at skrive kommandoet 1:100 og se hvad der sker. Prøv så 2:101.

2.3.2 Beregninger med vektorer

En af de smarte ting ved R er, at mange ensagtige beregninger kan udføres ad gangen, ved at gemme variablerne i vektorer. De bliver så behandled af lister af elementer, hvor beregningerne udføres elementvis. Hvis altså x indeholder vektoren \((x_1, x_2, \dots, x_k)\), hvor \(k\) er længden af vektoren, så giver x^2 en ny vektor med elementerne \(x_1^2, x_2^2,\dots, x_k^2\).

x <- c(5, 3, -2, 0, 1)
x^2
## [1] 25  9  4  0  1

Ved to vektorer af samme længde kan laves elementare beregninger elementvis. Er altså y en vektor med elementer \(y_1, \dots, y_k\), så giver y - x en vektor \((y_1 - x_1, y_2 - x_2, \dots, y_k - x_k)\).

y <- c(10, 7, 7, 7, 3)
y - x
## [1] 5 4 9 7 2

Har vektorerne ikke samme længde, så bliver den kortere forlænget ved at gentage den så mange gange som nødvendigt. Det er specielt tilfælde når man regner udtryk som indeholder enkelte tal og vektorer.

10 - x
## [1]  5  7 12 10  9

2.3.3 Længden af en vektor, og indeksering af elementer

R kender til længden af alle gemte vektorer. Den fås ved funktionen length, som for eksempel kan anvendes på de to variabler a og b fra før:

length(a)
## [1] 3
length(b)
## [1] 9

Elementerne i en vektor af længde \(k\) er nummereret fra 1 til \(k\). Bestemte elementer i en vektor pilles ud ved at skrive elementnummeret i kantede parenteser; fx fås det andet element i a ved a[2]. Det er også muligt at samtidigt trække flere elementer ud. Det gøres ved at putte en vektor med indeksnumre i parenteserne, fx. fås det første og tredje element af vores vektor a (som var givet ved c(3, -10, 17)) ved

a[c(1, 3)]
## [1]  3 17

Selve indeks kan også være gemt i en variabel:

indeks <- c(1,3)
a[indeks]
## [1]  3 17

Øvelse 2.6

Beregn gennemsnittet af vektoren x ved at bruge R funktionerne sum og length. Gem den i en variabel xbar.


Øvelse 2.7

Beregn summen af de kvadrerede afvigelser fra gennemsnittet for vektoren x fra før. Summen af de kvadrerede afvigelser er givet ved \[ \sum_{i=1}^k (x_i-\bar{x})^2, \quad \bar{x}=\frac{1}{k}\sum_{i=1}^k x_i, \] hvor \(k\) er vektorens længde. Du kan bruge det gemte resultat fra øvelse 2.3 her.