Vectors

Author

Søren O’Neill & Steen Harsted

Published

February 8, 2024


1 Vectors

A vector is an array of data of similar type, e.g. "a", "b", "j", "JK", "poW" or 2,5,3,8,34.

Single values such as "fkj" or 5 are simply vectors of length 1.

If you want to create a vector from a number of discrete single values, you can use the function c() which is short for concatenate:

# This creates a vector with 4 values
c(4,7,2,5)
[1] 4 7 2 5
# This creates an empty vector
c()
NULL
# This vector probably doesn't work out how your expected it to
# .. but R will coerce data into the same type if possible
c(4, 7, "O")
[1] "4" "7" "O"
# This creates a vector and stores it as a variable
my_vector <- c(2,7,5,3,8,9,2)

2 Vector indexes/indices

The values in a vector are stored in a particular order, numbered from position 1 to the last element of the vector.

# How many elements in a given vector?
length(my_vector)
[1] 7
# Values are addressable directly by their index
my_vector
[1] 2 7 5 3 8 9 2
my_vector[3]
[1] 5
my_vector[1:3]
[1] 2 7 5
my_vector[c(1,3,5)]
[1] 2 5 8
# R comes with two handy built-in vectors (of characters) called `letters` and `LETTERS`
letters[1:3]
[1] "a" "b" "c"
# The `which()` functions allows you to find an index
which(my_vector==7)
[1] 2

3 Applying functions and operators to vectors

Notice, that when applying functions (and operators like + or *) to a vector, some functions will return a summary value of the vector (e.g. mean()) and others will apply the function to all elements of the vector and return a new vector (e.g. sqrt()):

# Get the mean value of all element
mean(my_vector)
[1] 5.142857
# Get the square root of each element
sqrt(my_vector)
[1] 1.414214 2.645751 2.236068 1.732051 2.828427 3.000000 1.414214
# Double each element in my_vector
my_vector * 2
[1]  4 14 10  6 16 18  4

Notice that R will re-cycle vectors where appropriate. Look at this code and contemplate what is going on:

# Multiply 2, 3, 4 and 5 with 10 and 20 ...
c(2,3,4,5)*c(10,20)
[1]  20  60  40 100
c(10,20)*c(2,3,4,5)
[1]  20  60  40 100
c(1,2,3)*c(4,5,6,7)*c(9,10)
Warning in c(1, 2, 3) * c(4, 5, 6, 7): longer object length is not a multiple
of shorter object length
[1]  36 100 162  70

R will iterate the elements in each vector, thus first calculating the multiplication of the first elements – e.g. 1*4*9 in the c(1,2,3)*c(4,5,6,7)*c(9,10) example.

R will re-cycle the shorter vectors as many times as needed to complete the operation for all elements in the longest vector. Pay close attention the the warning and the result of the operation c(1,2,3)*c(4,5,6,7)*c(9,10).

4 Comparing vectors

The base R function identical() will return TRUE if two vectors contain the same elements in the same order, otherwise FALSE:

identical(letters[1:4], c("a", "b", "c", "d"))
[1] TRUE
identical(LETTERS[1:3], c("a", "B", "C"))
[1] FALSE

The base R function setequal() will return TRUE if the two vectors contain the same elements, even if in a different order, otherwise FALSE:

setequal(letters[1:4], c("b", "c", "d", "a"))
[1] TRUE
setequal(c("x", "b", "c", "d"), letters[1:4])
[1] FALSE

The base R function intersect() returns a vector of elements found in both of the two vectors:

intersect(letters[1:4], c("A", "b", "c", "d", "e", "b"))
[1] "b" "c" "d"

The base R function setdiff() returns the difference between two vectors – specifically, the elements present in the first vector, but not present in the second – the order of the vectors provided are thus important:

setdiff(letters[1:4], c("b", "c", "d", "e"))
[1] "a"
setdiff(c("b", "c", "d", "e"), letters[1:4])
[1] "e"

Finally, the base R function union() returns a vector of all elements present in one or both vectors:

union(letters[1:4], c("b", "c", "d", "e"))
[1] "a" "b" "c" "d" "e"
union(c("b", "c", "d", "e"), letters[1:4])
[1] "b" "c" "d" "e" "a"

5 Vektorer

En vektor er en array af data af samme type, f.eks. "a", "b", "j", "JK", "poW" eller 2,5,3,8,34.

Enkeltværdier såsom "fkj" eller 5 er simpelthen vektorer med længde 1.

Hvis du vil oprette en vektor ud fra et antal diskrete enkeltværdier, kan du bruge funktionen c(), som er en forkortelse for concatenate:

# Dette skaber en vektor med 4 værdier
c(4,7,2,5)
[1] 4 7 2 5
# Dette skaber en tom vektor
c()
NULL
# Denne vektor fungerer sandsynligvis ikke, som du forventede den
# .. men R vil tvinge data til at være den samme type, hvis det er muligt
c(4, 7, "O")
[1] "4" "7" "O"
# Dette opretter en vektor og gemmer den som en variabel
min_vektor <- c(2,7,5,3,8,9,2)

6 Vektor indeksering

Værdierne i en vektor er lagret i en bestemt rækkefølge, nummereret fra position 1 til det sidste element i vektoren.

# Hvor mange elementer i en given vektor?
length(min_vektor)
[1] 7
# Værdier kan adresseres direkte ved deres indeks
min_vektor
[1] 2 7 5 3 8 9 2
min_vektor[3]
[1] 5
min_vektor[1:3]
[1] 2 7 5
min_vektor[c(1,3,5)]
[1] 2 5 8
# R leveres med to praktiske indbyggede vektorer (af karaktertegn) kaldet "bogstaver" og "BOGSTAVER"
letters[1:3]
[1] "a" "b" "c"
# 'which()'-funktionerne giver dig mulighed for at finde et indeks
which(min_vektor==7)
[1] 2

7 Anvendelse af funktioner og operatorer på vektorer

Bemærk, at når du anvender funktioner (og operatorer som + eller *) på en vektor, vil nogle funktioner returnere en summary-værdi af vektoren (f.eks. mean()), og andre vil anvende funktionen på alle elementer af vektoren og returnerer en ny vektor (f.eks. sqrt()):

# Få middelværdien af alle elementer
mean(min_vektor)
[1] 5.142857
# Få kvadratroden af hvert element
sqrt(min_vektor)
[1] 1.414214 2.645751 2.236068 1.732051 2.828427 3.000000 1.414214
# Fordoble hvert element i my_vector
min_vektor * 2
[1]  4 14 10  6 16 18  4

Bemærk, at R vil gencbruge vektorer, hvor det er relevant. Se på denne kode og overvej, hvad der foregår:

# Gang 2, 3, 4 og 5 med 10 og 20 ...
c(2,3,4,5)*c(10,20)
[1]  20  60  40 100
c(10,20)*c(2,3,4,5)
[1]  20  60  40 100
c(1,2,3)*c(4,5,6,7)*c(9,10)
Warning in c(1, 2, 3) * c(4, 5, 6, 7): longer object length is not a multiple
of shorter object length
[1]  36 100 162  70

R vil iterere elementerne i hver vektor og beregner således først multiplikationen af de første tre elementer – f.eks. 1*4*9 i eksemplet c(1,2,3)*c(4,5,6,7)*c(9,10).

R vil genbruge de kortere vektorer så mange gange som nødvendigt for at fuldføre operationen for alle elementer i den længste vektor. Vær meget opmærksom på advarslen og resultatet af operationen c(1,2,3)*c(4,5,6,7)*c(9,10).

8 Sammenligning af vektorer

Basis R-funktionen identical() vil returnere TRUE hvis to vektorer indeholder de samme elementer i samme rækkefølge, ellers FALSE:

identical(letters[1:4], c("a", "b", "c", "d"))
[1] TRUE
identical(LETTERS[1:3], c("a", "B", "C"))
[1] FALSE

Basis R-funktionen ‘setequal()’ vil returnere ‘TRUE’, hvis de to vektorer indeholder de samme elementer, selvom i en anden rækkefølge, ellers ‘FALSE’:

setequal(letters[1:4], c("b", "c", "d", "a"))
[1] TRUE
setequal(c("x", "b", "c", "d"), letters[1:4])
[1] FALSE

Basis R-funktionen intersect() returnerer en vektor af elementer fundet i begge de to vektorer:

intersect(letters[1:4], c("A", "b", "c", "d", "e", "b"))
[1] "b" "c" "d"

Basis R-funktionen setdiff() returnerer forskellen mellem to vektorer – specifikt de elementer, der er til stede i den første vektor, men ikke til stede i den anden – rækkefølgen af ​​de angivne vektorer er derfor vigtig:

setdiff(letters[1:4], c("b", "c", "d", "e"))
[1] "a"
setdiff(c("b", "c", "d", "e"), letters[1:4])
[1] "e"

Endelig returnerer basis R-funktionen union() en vektor af alle elementer, der er til stede i en eller begge vektorer:

union(letters[1:4], c("b", "c", "d", "e"))
[1] "a" "b" "c" "d" "e"
union(c("b", "c", "d", "e"), letters[1:4])
[1] "b" "c" "d" "e" "a"