2.4 Logiske variabler og vektorer
R kan tjekke bestemte udsagn om tal, såsom “fem er mindre end tre”. Hvis man skriver udsagnet, får man sandhedsværdien tilbage, som er enten TRUE
eller FALSE
:
5 < 3
## [1] FALSE
Følgende relationer til sammenligning af to tal findes i R:
Relation | Betydning |
---|---|
< |
< skarp mindre end |
<= |
≤ mindre end eller lig med |
> |
> skarp større end |
>= |
≥ større end eller lig med |
== |
= lig med |
!= |
≠ forskellig fra |
Man kan sammenligne to tal, eller også en vektor og en tal eller to vektorer.
2 <= 3
## [1] TRUE
2 >= c(3, -1, 5, 2)
## [1] FALSE TRUE FALSE TRUE
c(1, 2, 3) != c(1, 4, 3)
## [1] FALSE TRUE FALSE
Logiske variabler gemmer sandhedsværdier.
Logiske værdier kan kombineres ved “og” eller “eller” operatorer og negationen. Antag, vi har gemt logiske værdier i variablerx
og y
, så betyder
Operator | Betydning |
---|---|
!x |
¬x, negationen |
x & y |
x∧y, og |
x | y |
x∨y, eller |
xor(x,y) |
enten x eller y. |
For eksempel kan bestemmes, om 1≤x, x≤5 og 1≤x≤5 gælder når x antager værdierne 0,2.3 og 6 ved følgende kode:
c(0, 2.3, 6)
x <-1 <= x
## [1] FALSE TRUE TRUE
<= 5 x
## [1] TRUE TRUE FALSE
1 <= x) & (x <= 5) (
## [1] FALSE TRUE FALSE
Skal resultatet gemmes, så bruges med fordel parenteser for at øge kodens læselighed. I nedenstående eksempel bruges et langt navn. Det er tilladt at bruge underscores og punktum i variablenavne, men ikke bindestreg, fordi dette ville interpreteres som “minus”.
((1 <= x) & (x <= 5))
x_ligger_i_intervallet <- x_ligger_i_intervallet
## [1] FALSE TRUE FALSE
Internt bliver de koderet som 1 og 0, hvor 1 står for TRUE
. Man kan regne med dem som om de var tal.
c(TRUE, FALSE, TRUE)
LoGo <- LoGo
## [1] TRUE FALSE TRUE
sum(LoGo)
## [1] 2
Øvelse 2.8
Gem en vektor a=(−3,7,−2,10) og bestem ved at beregne i R, hvor mange af af as elementer
- er større end -2.5,
- er mindre end 9,
- ligger mellem -2.5 og 9,
- ligger uden for intervallet [−2.5,9].
2.4.1 Indeksering af vektorer ved logiske udtryk eller logiske variable
I afsnit 2.3.1 så vi, hvordan man trækker flere elementer i en vektor ved at give indeksnumre. Det er faktisk muligt, at bruge en vektor af logiske værdier som indeks, hvor der angives, hvilke elementer skal beholdes.
c(-4, 3, 7, -1, 6, -5, 10.3, round(pi, digits = 2))
a <- a > 0
positiv <- positiv
## [1] FALSE TRUE TRUE FALSE TRUE FALSE TRUE TRUE
a[positiv]
## [1] 3.00 7.00 6.00 10.30 3.14
> 0] a[a
## [1] 3.00 7.00 6.00 10.30 3.14
Øvelse 2.9
Forklar ovenstående kode, og lav en ny vektor smaa
som indeholder alle elementer af a
der er mindre eller lig fire.