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
, , 2
> 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)
|
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)))
> tapply(tabulka$hodnota, INDEX=tabulka$skupina, mean)
|