Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Vektory Základní příkazy, tvorba vektorů

Logo Matematická biologie

Základní příkazy, tvorba vektorů

Jazyk R pracuje nad datovými strukturami. Nejjednodušší takovou strukturou je vektor. Např. jednoduchá hodnota (logická hodnota TRUE, numerická hodnota 2, ...) je vektor délky 1. Vektory jsou 1-dimenzionální struktury, skládající se z posloupnosti prvků. Všechny prvky vektoru musí být stejného datového typu (modu) - numerický, komplexní, logický nebo typu řetězec.

Některé prvky vektoru ovšem nemusí být známy - v těchto případech je na místo příslušného prvku vektoru umístěna speciální hodnota NA („Not Available“). Všechny operace nad NA vrací hodnotu NA. Funkce is.na(x) vrací hodnoty TRUE na těch pozicích vektoru x, na kterých mají prvky hodnotu NA, na ostatních pozicích vrací hodnotu FALSE. Rovněž některé prováděné operace nemusí dávat smysl (např. 0/0, Inf - Inf), v těchto případech vrací příkaz hodnotu NaN („Not a Number“).

Pro vytvoření numerického vektoru x o hodnotách -1.2, 31.8., 10.7, 5.6, 9.22 použijeme příkaz x <- c(-1.2, 31.8, 10.7, 5.6, 9.22). Analogicky můžeme použít příkazu assign("nazev", c()), v našem případě tedy assign("x", c(-1.2, 31.8, 10.7, 5.6, 9.22)). Přiřazení může být rovněž provedeno v opačném směru: c(-1.2, 31.8, 10.7, 5.6, 9.22) -> x.

Naprosto analogickým způsobem můžeme zadávat komplexní vektory, např. y <- c(1+2i, 3, 5i), vektory logických hodnot, např. z <- (x<12 & x>-1), nebo vektory textových hodnot, např. ovoce <- c("banan", "broskev", "jablko", "pomeranc").

Funkce c() svůj výstup zobrazuje jako řádkový vektor, ovšem je s ním nakládáno jako s vektorem sloupcovým.

> c(2, 4, "v", F)    jedna z hodnot je znak, vektor tedy bude textový
[1]   "2"    "4"    "v"    "FALSE"

Příkaz vector(mode, length) vytvoří vektor daného typu mode a dané délky length s nulovými hodnotami.

> vector(mode="logical", length=3)
[1]    FALSE    FALSE    FALSE
> vector(m="character", length=5)
[1]    ""    ""    ""    ""    ""

Nejjednodušším způsobem ke generování posloupností čísel je použít operátoru :. Příkaz a:b vygeneruje aritmetickou posloupnost prvků od a do b s krokem 1, resp. -1. Funkce sequence(n) slouží ke generování posloupnosti hodnot od čísla 1 do čísla (vektoru hodnot) uvedeného v argumentu funkce.

> 4:10

[1]    4    5    6    7    8    9    10
> 2.4:7
[1]    2.4    3.4    4.4    5.4    6.4
> sequence(6)
[1]    1    2    3    4    5    6
> sequence(c(3,5))
>    1    2    3    1    2    3    4    5

 

Ke generování posloupností s daným krokem MATLAB používá funkci a:krok:b. R tuto syntaxi nezná, je proto třeba použít jiných funkcí.

Pro generování složitějších posloupností se používá funkce seq(), která má 5 argumentů, ale pouze některé z nich mohou být specifikovány současně při jednom volání.

  • První 2 argumenty specifikují počáteční a koncový bod posloupnosti, příkaz seq(2,10) je ekvivalentní příkazu 2:10. Argumenty mohou být rovněž volány pomocí from=a, to=b.
    Příkazy seq(1,30), seq(from=1, to=30) a seq(to=30, from=1) vrací stejný výsledek.
  • Argument velikosti kroku: by=krok.
  • Argument délky posloupnosti: length=delka.
  •  V případě, že je použit argument along.with, musí být jediným argumentem funkce. Argument along.with=v generuje posloupnost o délce shodné s délkou vektoru v.

Příkaz seq() vytváří prázdnou posloupnost.

> seq()
[1]    1
> seq(from=2, to=10)
[1]    2    3    4    5    6    7    8    9    10
> seq(from=2, to=15, by=3)
[1]    2    5    8    11    14
> seq(length=6)
[1]    1    2    3    4    5    6
> seq(from=3, length=6)
[1]    3    4    5    6    7    8
> (k <- seq(to=13, length=6))
[1]    8    9    10    11    12    13
> 7 + seq(along.with=k)
[1]    8    9    10    11    12    13

Pro vytvoření vektoru, v němž se opakuje určitý objekt (hodnota nebo vektor), se používá funkce rep(x). Jejími argumenty jsou:

times=pocet udává počet, kolikrát má být objekt za sebe poskládán
each=pocet udává počet opakování každé složky objektu
length.out udává délku výsledného vektoru

> x <- 2:5
> rep(x, times=3)
   stejný výsledek dává i  rep(x, 3)
[1]    2    3    4    5    2    3    4    5    2    3    4    5
> rep(x, each=3)
[1]    2    2    2    3    3    3    4    4    4    5    5    5
> rep(x, length.out=10)
[1]    2    3    4    5    2    3    4    5    2    3
> rep(rep(x, each=2), times=2)
[1]    2    2    3    3    4    4    5    5    2    2    3    3    4    4    5    5

Náhodná čísla generovaná v R (a obecně ve všech softwarech) nejsou ve skutečnosti zcela náhodná, ale jsou generována na základě specifických algoritmů tak, aby se náhodným číslům podobala (tzv. pseudonáhodná čísla). Podle pravděpodobnosti výskytu jednotlivých hodnot můžeme generovat čísla z různých typů rozdělení:

runif(n, min=a, max=b)   Náhodně vygeneruje n náhodných čísel z intervalu (a, b), každé číslo má stejnou pravděpodobnost výskytu.
rpois(n, lambda)   Náhodně vygeneruje  n celých čísel z Poissonova rozdělení s parametrem lambda.
rnorm(n, mean=mi, sd=sigma)    Náhodně vygeneruje n reálných čísel z normálního rozdělení se střední hodnotou mi a směrodatnou odchylkou sigma.

> runif(10, min=2, max=8)
[1]    3.468575    2.006183    5.151939    4.864977    5.117221    5.981666
[7]    6.186421    6.470627    7.230629    7.726394

> rpois(10, 5)
[1]    7    11     1     4    3    5    6    3    1    5
> rnorm(10, mean=5, sd=2)
[1]    3.880884    5.902384    9.645860    3.955287    3.923085    3.763641 

[7]    1.782563    6.003977    7.512364    4.685642

Dalším užitečným příkazem ke generování vektorů je funkce sample(). Funkce sample(x, size, replace=FALSE, prob=NULL) vytvoří náhodnou permutaci prvků objektu x. Objekt x může být vektor (číselný, komplexní, logický nebo vektor znaků) nebo přirozené číslo. Argument size je přirozené číslo udávající délku výsledného vektoru. Argument replace=TRUE umožňuje opakování vybraných prvků, zatímco implicitní nastavení replace=FALSE opakování nepovoluje. Argument prob umožňuje nastavení pravděpodobnostních vah výběru jednotlivých prvků.

> x <- c(1, 3, 5, 7, 2, 6)
> sample(x, 3)

[1]    6    7    2
> sample(x, 3, replace=TRUE)
[1]    3    3    2
> x <- letters[1:15]  
 vektor prvních 15 písmen abecedy (a-o)
> sample(x, 4, prob=c(1, rep(0.1, 13), 1))
[1]    "a"    "o"    "d"    "l"
> sample(x, 8, prob=c(1, rep(0.1, 13), 1), replace=TRUE)
[1]    "e"    "b"    "o"    "o"    "n"    "a"    "a"    "c"

 

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity