User Tools

Site Tools


Sidebar

Vít Syrovátka

Úvod do R


Teorie

Sekce Teorie je (a asi ještě dlouho bude) v průběžné výstavbě.

Software

Objekty v R

Cvičení

Data

Zápočet

Další zdroje

R for Data Science (2017) - excelentní tutorial Hadleyho Wickhama následující filozofii tidyversu
Data Processing with dplyr & tidyr - tutorial na úpravu dataframů pomocí tidyversových balíků dplyr a tidyr

r_intro:cs:theory:list

List - seznam

List, česky by se řeklo seznam, představuje nejuniverzálnější typ objektu, ve kterém je možné kombinovat hodnoty jakýchkoliv typů. Komponenty listu jsou za sebou seřazeny v řadě, list vlastně je speciální případ vektoru, je to vektor objektů.

Vytvoření listu

List můžeme vytvořit spojením objektů pomocí funkce list() . Do kulatých závorek stačí vypisovat objekty, které chceme do listu vložit:

list('a', -5:5, matrix(TRUE, nrow= 2, ncol= 2))
[[1]]
[1] "a"
 
[[2]]
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5
 
[[3]]
     [,1] [,2]
[1,] TRUE TRUE
[2,] TRUE TRUE

Při tvorbě listu můžeme jeho komponenty pojmenovat (případně přejmenovat, jedná-li se o již existující objekty):

mylist<- list(a = 'a', vektor= -5:5, maticka= matrix(TRUE, nrow= 2, ncol= 2))
$a
[1] "a"
 
$vektor
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5
 
$maticka
     [,1] [,2]
[1,] TRUE TRUE
[2,] TRUE TRUE

Podvýběry v listu

Všimněte si dvojitých hranatých závorek [[]] a symbolů $ ve výstupu R. Pomocí nich si lze sáhnout na jednotlivé komponenty listu. Například matici maticka můžeme vytáhnout takto:

mylist$maticka
     [,1] [,2]
[1,] TRUE TRUE
[2,] TRUE TRUE
 
> mylist[["maticka"]]
     [,1] [,2]
[1,] TRUE TRUE
[2,] TRUE TRUE
 
> mylist[[3]]
     [,1] [,2]
[1,] TRUE TRUE
[2,] TRUE TRUE

Ve všech případech jsme si nechali vypsat přímo daný objekt uložený v listu. Protože list je ale vlastně vektor objektů, můžeme si z něj vytáhnout jen jeho část, obsahující nějaké objekty. To uděláme stejně jako u vektorů pomocí jednoduchých hranatých závorek []. Například si můžeme nechat vypsat jen tu část, obsahující vektor vektor:

mylist['vektor']
$vektor
 [1] -5 -4 -3 -2 -1  0  1  2  3  4  5

Všimněte si symbolu dolar $, který naznačuje, že to, co jsme si nechali vypsat, je nějaký list s komponentem vektor, ve kterém jsou nějaká čísla. Výsledek je ale stále list! Proč je to důležité? Protože s listem nejde počítat. Abychom mohli provést jakoukoli operaci s hodnotami uloženými v komponentu jakéhokoliv listu, musíme si sáhnout přímo na ten komponent, na ten objekt uvnitř listu. Řekněme, že chci vynásobit hodnoty vektoru třemi. Zde jsou výsledky naivního a uvědomělého pokusu:

# naivní
mylist['vektor'] * 3
Error in mylist["vektor"] * 3 : non-numeric argument to binary operator
 
# uvědomělý
mylist[['vektor']] * 3
 [1] -15 -12  -9  -6  -3   0   3   6   9  12  15
 
# ještě jeden uvědomělý
mylist$vektor * 3
 [1] -15 -12  -9  -6  -3   0   3   6   9  12  15

Tvorba prázdného listu

Někdy se může hodit prázdný list, do něhož posléze můžeme přidávat jednotlivé komponenty. Protože list je vlastně vektor svých komponentů1), lze jej vytvořit pomocí funkce vector() , jejíž argument mode= nastavíme na “list” a length= na 0:

zero.list<- vector(mode= "list", length= 0)
zero.list
list()

Přidání komponentu listu

Přidání komponentu listu pak provádíme také stejně jako u vektorů a to tak, že pomocí funkce c() ke stávajícímu listu komponent(y) přidáme. Pozor ale, každý komponent musí sám o sobě být list.

c(zero.list, par.pismenek= list(letters[1:6]), "radius", mat= list(matrix(1:9, ncol= 3)))
$par.pismenek
[1] "a" "b" "c" "d" "e" "f"
 
[[2]]
[1] "radius"
 
$mat
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

tato sekce ještě potřebuje dokončit…

Přejmenování komponentů listu

1)
Lépe řečeno list je vektor jednotlivých listů obsahujících objekty spojené do listu.
r_intro/cs/theory/list.txt · Last modified: 2017/02/23 17:09 (external edit)