forked from rstats-tartu/lectures
-
Notifications
You must be signed in to change notification settings - Fork 0
/
02-kalkulaator.Rmd
103 lines (84 loc) · 2.97 KB
/
02-kalkulaator.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# R on kalkulaator {#calc}
Liidame `2 + 2`.
```{r}
2 + 2
```
Nüüd trükiti see vastus konsooli kujul `[1] 4`.
See tähendab, et `2 + 2 = 4`.
Kontrollime seda:
```{r}
## liidame 2 ja 2 ning vaatame kas vastus võrdub 4
answer <- (2 + 2) == 4
## Trükime vastuse välja
answer
```
Vastus on `r answer`, (`r class(answer)`).
Pane tähele, et aritmeetiline võrdusmärk on `==` (sest = tähendab hoopis väärtuse määramist objektile/argumendile).
Veel mõned näidisarvutused:
```{r eval=FALSE}
## 3 astmes 2; Please read Note ?'**'
3 ^ 2 # 3**2 also works
## Ruutjuur 3st
sqrt(3)
## Naturaallogaritm sajast
log(100)
```
Arvule $\pi$ on määratud oma objekt `pi`.
Seega on soovitav enda poolt loodavatele objektidele mitte panna nimeks "pi".
```{r}
## Ümarda pi neljale komakohale
round(pi, 4)
```
Ümardamine on oluline tulemuste väljaprintimisel.
## Sama koodi saab kirjutada neljal viisil
Hargnevate teede aed: kui me muudame olemasolevat objekti on meil alati kaks valikut.
Me kas jätame muudetud objektile vana objekti nime või me anname talle uue nime.
Esimesel juhul läheb vana muutmata objekt workspacest kaduma aga nimesid ei tule juurde ja säilib teatud workflow sujuvus.
Teisel juhul jäävad analüüsi vaheobjektid meile alles ja nende juurde saab alati tagasi tulla.
Samas tekkib meile palju sarnaste nimedega objekte.
Kõigepealt laadime vajalikud raamatukogud.
```{r}
## We need piping operator '%>%' from magrittr.
## We can import '%>%' via dplyr from tidyverse
library(dplyr)
```
Esimene võimalus:
```{r}
a <- c(2, 3)
a <- sum(a)
a <- sqrt(a)
a <- round(a, 2)
a
```
Teine võimalus:
```{r}
a <- c(2, 3)
a1 <- sum(a)
a2 <- sqrt(a1)
a3 <- round(a2, 2)
a3
```
Kolmas võimalus on lühem variant esimesest.
Me nimelt ühendame etapid toru `%>%` kaudu.
Siin me võtame objekti "a" (nö. andmed), suuname selle funktsiooni `sum()`, võtame selle funktsiooni väljundi ja suuname selle omakorda funktsiooni `sqrt()`.
Seejärel võtame selle funktsiooni outputi ja määrame selle nimele "result" (aga võime selle ka mõne teise nimega siduda).
Kui mõni funktsioon võtab ainult ühe parameetri, mille me talle toru kaudu sisse sõõdame, siis pole selle funktsiooni taga isegi sulge vaja.
> NB! R hea stiili juhised soovitavad siiski ka _pipe_-s kasutada funktsiooni koos sulgudega!
See on hea lühike ja inimloetav viis koodi kirjutada, mis on masina jaoks identne esimese koodiga.
```{r}
a <- c(2, 3)
result <- a %>% sum() %>% sqrt() %>% round(2)
result
```
Neljas võimalus, klassikaline baas R lahendus:
```{r}
a <- c(2, 3)
a1 <- round(sqrt(sum(a)), 2)
a1
```
Sellist koodi loetakse keskelt väljappoole ja kirjutatakse alates viimasest operatsioonist, mida soovitakse, et kood teeks.
Masina jaoks pole vahet.
Inimese jaoks on küll: 4. variant nõuab hästi pestud ajusid.
Koodi lühidus 4 --> 3 --> 1 --> 2 (pikem)
Lollikindlus 1 --> 2 --> 3 --> 4 (vähem lollikindel)
See on teie otsustada, millist koodivormi te millal kasutate, aga te peaksite oskama lugeda neid kõiki.