Generování hodnot podle pravidel

2:8   # vektor čísel s rozsahem hodnot 2 až 8 (krok +1)
## [1] 2 3 4 5 6 7 8
8:2   # vektor čísel s rozsahem hodnot 8 až 2 (krok -1)
## [1] 8 7 6 5 4 3 2
seq(2, 8)  # stejné, jako 2:8
## [1] 2 3 4 5 6 7 8
seq(8, 2)  # stejné, jako 8:2
## [1] 8 7 6 5 4 3 2
seq(2, 8, by = 0.5)  # specifikace kroku
##  [1] 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0
seq(2, 8, length.out = 6)  # specifikace počtu čísel, krok se vypočte automaticky
## [1] 2.0 3.2 4.4 5.6 6.8 8.0
sample(1:6, size = 20, replace = TRUE)     # náhodné hody kostkou
##  [1] 1 4 3 1 3 3 5 3 3 3 2 6 5 3 6 1 5 1 5 6
sample(c(0, 1), size = 20, replace = TRUE) # náhodné hody mincí (např. 0 = rub, 1 = líc)
##  [1] 0 0 1 0 1 1 1 0 0 1 0 0 1 0 0 1 0 0 1 1
sample(c(0, 1), size = 20, replace = TRUE, prob = c(0.2, 0.8)) # nevyvážená mince
##  [1] 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1
normalniMince <- sample(c(0, 1), size = 10000, replace = TRUE) # hodně hodů
mean(normalniMince)   # průměrná hodnota by měla být okolo 0.5
## [1] 0.5035
nevyvazenaMince <- sample(c(0, 1), size = 10000, replace = TRUE, prob = c(0.2, 0.8)) # hodně hodů
mean(nevyvazenaMince)   # průměrná hodnota by měla být okolo 0.8
## [1] 0.7957
sample(c("muž", "žena"), size = 20, replace = TRUE) # náhodné generování muž a žena
##  [1] "muž"  "muž"  "muž"  "žena" "muž"  "muž"  "muž"  "muž"  "muž"  "žena"
## [11] "žena" "žena" "muž"  "muž"  "muž"  "žena" "žena" "žena" "žena" "muž"
sample(factor(c("muž", "žena")), size = 20, replace = TRUE) # to samé, ale jako faktorová proměnná
##  [1] muž  žena muž  žena žena muž  žena muž  žena muž  žena žena muž  muž 
## [15] muž  žena žena žena muž  žena
## Levels: muž žena
sample(factor(c("muž", "žena")), size = 20, replace = TRUE, prob = c(0.1, 0.9)) #snaha o modelování stavu na FF
##  [1] žena žena žena žena žena žena žena muž  žena žena muž  žena žena muž 
## [15] žena žena žena muž  muž  žena
## Levels: muž žena
runif(n = 20, min = 1, max = 2)  # 20 čísel rovnoměrného rozdělení mezi 1 až 2 (včetně)
##  [1] 1.297613 1.628445 1.907955 1.164446 1.203814 1.366031 1.222015
##  [8] 1.701636 1.937688 1.036681 1.199828 1.143562 1.363078 1.309542
## [15] 1.444279 1.792661 1.106968 1.052386 1.134318 1.543936
rnorm(n = 10)  # 10 čísel standardního normálního rozdělení (střední hodnota = 0, směrodatná odchylka = 1)
##  [1] -0.3157674 -0.9644942 -0.9707963  1.2940927  0.9057628  0.6547424
##  [7] -1.5975128 -1.1626703  1.3473013  0.8390699
rnorm(n = 10, mean = 30, sd = 0.5)  # 10 čísel normálního rozdělení
##  [1] 29.55481 29.60716 29.84833 30.24655 29.68287 30.14958 30.14239
##  [8] 29.57157 29.08429 29.93343
# nastavení "pevného počátku" náhodného generátoru - vhodné pro reprodukovatelné výsledky do publikace
set.seed(1)
rnorm(n = 5)
## [1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078
# přestože jsou čísla "náhodná", jsou stejná, jako v předchozím případě (číslům říkáme pseudonáhodná)
set.seed(1)
rnorm(n = 5)
## [1] -0.6264538  0.1836433 -0.8356286  1.5952808  0.3295078

Tip: Volání funkcí s argumenty

Pokud si chceme rychle vybavit, jaké parametry (argumenty) funkce umožňuje zadat, napišme její název, otevírací kulatou závorku a stiskněme klávesu tabulátor. Objeví se bublinová nápověda s přehledem možných parametrů, šipkami nahoru a dolů v nich rolujeme a čteme detailní vysvětlující popis.

Např. napíšeme rnorm( a stiskneme TAB, vyskočí nápověda, kde šipkou dolů dojedeme na sd a dočteme se detaily. Když se nám parametr líbí, stiskneme ENTER a rovnou se nám tím do zápisu sám vloží.

Všimněme si, že každý parametr má svůj název. Některé z nich jsou povinné, některé nepovinné (můžeme je použít, ale nemusíme). Některé mají uvedeny tzv. defaultní hodnoty, které se použijí, když parametr sami nenastavíme.

Parametry zadáváme buď jen hodnotami dle základního pořadí, které se po stisku TAB zobrazí, a nebo je můžeme uvádět v přeházeném pořadí (a některé klidně vynechat), pak je potřeba ale uvést i jejich jméno. Takový zápis doporučujeme zvláště v případech, kdy je parametrů více, při čtení programu je pak na první pohled zřejmé, co nastavujeme.

seq(from = 1, to = 5)
## [1] 1 2 3 4 5
seq(to = 5, from = 1)
## [1] 1 2 3 4 5

Úlohy

  1. Vygenerujte vektor celých čísel 1 až 10.
  2. Vytvořte vektor čísel 1 až 10 s krokem 0.5. Kolik jich celkem vyšlo? Dvacet to nebude, že?
  3. Vytvořte vektor dvaceti čísel v rozsahu 1 až 10. Že není krok hezkých 0.5?
  4. Uložte do proměnné 10000 náhodných hodů kostkou. Vypočtěte průměr. Mělo by vyjít přibližně 3.5.
  5. Vygenerujte 10 náhodných čísel s normálním rozdělením, střední hodnotou 0 a směrodatnou ochylkou 5. Zkuste funkci zadat argumenty
    1. bez pojmenovaných argumentů (čísla ve správném pořadí),
    2. s pojmenovanými argumenty (v základním pořadí),
    3. s pojmenovanými argumenty (v přeházeném pořadí).

© 6. 3. 2015 Tomáš Bořil, borilt@gmail.com