V tomto článku se podíváme na to, co jsou to listy (lists) a jak s nimi pracovat.

Příklad 1: Vytvoření listu

Listy můžeme chápat jako seznam proměnných stejného nebo různého typu.

Například bychom si mohli vytvořit jeden vektor, jednu matici a jednu kategoriální proměnnou (podrobnosti k těmto typům proměnných viz příslušné kapitoly).

> mujVektor = c(1, 2, 3, 4, 5)

> mojeMatice = matrix(c(1, 2, 3, 4, 5, 6), ncol = 3)

> mujFaktor = as.factor(c(0, 1, 0, 1, 0))

Tyto tři proměnné pak můžeme spojit do listu následujícím způsobem.

> mujList = list(mujVektor, mojeMatice, mujFaktor)

Získáme následující list:

> mujList

[[1]]

[1] 1 2 3 4 5

[[2]]

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

[[3]]

[1] 0 1 0 1 0

Levels: 0 1

Vidíme, že tento list obsahuje tři složky: první složka (označená [[1]]) obsahuje proměnnou mujVektor, druhá složka (označená [[2]]) obsahuje proměnnou mojeMatice, a třetí složka (označená [[3]]) obsahuje proměnnou mujFaktor.

Složky listu můžeme libovolně pojmenovat. K tomu využíváme příkaz names.

> names(mujList) = c("mujVektor","mojeMatice","mujFaktor")

> mujList

$mujVektor

[1] 1 2 3 4 5

$mojeMatice

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

$mujFaktor

[1] 0 1 0 1 0

Levels: 0 1

Příklad 2: K čemu slouží listy?

Samozřejmě se nabízí otázka, k čemu je to všechno dobré. Zjednodušeně řečeno, listy jsou způsobem, jak uložit několik různých proměnných na jedno místo. Typicky se tedy používají v souvislosti s nějakou funkcí, která počítá a vrací několik různých věcí. Ukažme si to na příkladu funkce lm, která slouží k odhadu lineární regrese.

Vytvoříme si proměnné x a y a použijeme je k odhadu lineární regrese (viz kapitola lineární regrese). Výsledek uložíme do proměnné regrese.

> x = c(1, 3, 5, 7, 9)

> y = c(2, 3, 7, 8, 10)

> regrese = lm(y ~ x)

Do proměnné regrese se, i když to není na první pohled vidět, uložil list s mnoha různými složkami. Jakými? To zjistíme, když použijeme příkaz str(regrese). Tento příkaz nám zobrazí strukturu této proměnné, tedy ukáže, z čeho se vlastně skládá.

Tím zjistíme, že proměnná regrese je list o dvanácti složkách. Zde vypíšeme pro úsporu místa jen prvních pět. Těchto prvních pět složek se jmenuje coefficients, residuals, effects, rank, fitted.values.

Vidíme, že nemají všechny stejnou strukturu. Například složka coefficients obsahuje jen dvě čísla (odhadnuté regresní koeficienty), zatímco složka fitted.values pět čísel (regresí predikované hodnoty).

> str(regrese)

List of 12

$ coefficients : Named num [1:2] 0.75 1.05

..- attr(*, "names")= chr [1:2] "(Intercept)" "x"

$ residuals : Named num [1:5] 0.2 -0.9 1 -0.1 -0.2

..- attr(*, "names")= chr [1:5] "1" "2" "3" "4" ...

$ effects : Named num [1:5] -13.416 6.641 0.77 -0.601 -0.972

..- attr(*, "names")= chr [1:5] "(Intercept)" "x" "" "" ...

$ rank : int 2

$ fitted.values: Named num [1:5] 1.8 3.9 6 8.1 10.2

..- attr(*, "names")= chr [1:5] "1" "2" "3" "4" ...

Bez pomocí listu bychom jen stěží mohli mít různé proměnné takto pěkně a přehledně pohromadě.

Příklad 3: Operace s listy

Listy jen málokdy vytváříme sami. Častěji je za nás vytvoří nějaká funkce a naším úkolem je „najít v nich to, co hledáme“. Proto si nyní ukážeme, jak v listech hledat.

Vraťme se k listu mujList. Existují dva způsoby, jak z listu „dostat, co potřebujeme“.

Prvním způsobem je zadat pořadí složky listu, která nás zajímá. Například v našem listu je na druhém místě matice. Zobrazíme si ji tedy takto (pozor, hranaté závorky je potřeba napsat dvakrát).

> mujList[[2]]

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

Druhým způsobem je použít symbol dolaru a následně napsat jméno složky listu, která nás zajímá. Například takto:

> mujList$mojeMatice

[,1] [,2] [,3]

[1,] 1 3 5

[2,] 2 4 6

Druhý způsob lze samozřejmě použít jen za předpokladu, že složky listu mají nějaká jména. Funkce, které jsou součástí R, ale nikdy nevrací listy s nepojmenovanými složkami.

Autor článku: Lenka Fiřtová