Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyVýpočetní matematické systémy Výuka jazyka R Programování v R Skupiny funkcí apply()

Logo Matematická biologie

Skupiny funkcí apply()

Do této skupiny patří funkce apply(), lapply(), sapply() a tapply(). Společnou vlastností všech těchto funkcí je schopnost aplikovat funkci na vybrané části struktury bez použití cyklu, což má výhody v přehlednosti i rychlosti výpočtu.
Funkce apply() se používá pro vektory, matice a pole. Funkce požaduje tři argumenty: název pole a jeho dimenze, na kterých má být provedena požadovaná operace. Její název je třetím argumentem funkce. Jestliže u matic druhý argument nabývá hodnoty 1, operace se provádí po řádcích, v případě hodnoty 2 po sloupcích, u polí vyšší hodnoty odkazují na další dimenze.

> ar <- array(1:8, c(2,2,2))
, , 1
 
[,1]
[,2]
[1,]
1
3
[2,]
2
4

, , 2

 
[,1]
[,2]
[1,]
5
7
[2,]
6
8
> apply(ar, 1, sum)
[1]    16    20
> apply(ar, 2, sum)
[1]    14    22
> apply(ar, 3, sum)
[1]    10    26

Obě funkce lapply() i  sapply() provádí výpočet určité funkce v jednotlivých složkách seznamu jako prvního argumentu. Druhým argumentem je název funkce, která má být provedena. Tyto příkazy se liší pouze výstupem - zatímco lapply() vrací seznam o stejném počtu složek jako vstupní seznam, funkce sapply() se snaží výsledek zjednodušit do vektoru nebo matice. 

> l <- list(1:5, 5:14))
[[1]]
[1]    1    2    3    4    5
 

[[2]]

[1]    5    6    7    8    9    10    11    12    13    14

> lapply(l, range)

[[1]]

[1]    1    5

 

[[2]]

[1]    5    14

> sapply(l, range)
 
[,1]
[,2]
[1,]
1
5
[2,]
5
14

Funkce tapply() aplikuje požadovanou funkci na roztříděná data v tabulce dat. Argument INDEX specifikuje seznam položek pro roztřídění.

> tabulka <- data.frame(id=c(1:6), skupina=c(1, 2, 2, 1, 2, 1), hodnota=runif(6, 2, 4)))
 
  id
  skupina
hodnota
 1
1
1
3.238305
2
2
2
2.502754
3
3
2
3.939131
4
4
1
3.524773
5
5
2
3.731300
6
6
1
3.836787

> tapply(tabulka$hodnota, INDEX=tabulka$skupina, mean)

1
2
3.533288
3.391061

 

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