Cílem tohoto kurzu je představit kolekci funkcí apply (). Funkce apply () je nejzákladnější ze všech kolekcí. Naučíme se také sapply (), lapply () a tapply (). Aplikační kolekci lze zobrazit jako náhradu za smyčku.
Kolekce apply () je svázána se základním balíčkem r, pokud instalujete R s Anacondou. Funkce apply () může být krmena mnoha funkcemi k provádění redundantní aplikace na kolekci objektů (datový rámec, seznam, vektor atd.). Účelem apply () je především vyhnout se výslovnému použití konstruktů smyčky. Mohou být použity pro vstupní seznam, matici nebo pole a použít funkci. Libovolnou funkci lze předat do apply ().
V tomto výukovém programu se naučíte
- funkce apply ()
- funkce lapply ()
- funkce sapply ()
- Vektor řezu
- funkce tapply ()
funkce apply ()
apply () bere datový rámec nebo matici jako vstup a dává výstup ve vektoru, seznamu nebo poli. Funkce apply () se primárně používá, aby se zabránilo explicitnímu použití smyčkových konstruktů. Jedná se o nejzákladnější ze všech sbírek, které lze použít nad matricí.
Tato funkce má 3 argumenty:
apply(X, MARGIN, FUN)Here:-x: an array or matrix-MARGIN: take a value or range between 1 and 2 to define where to apply the function:-MARGIN=1`: the manipulation is performed on rows-MARGIN=2`: the manipulation is performed on columns-MARGIN=c(1,2)` the manipulation is performed on rows and columns-FUN: tells which function to apply. Built functions like mean, median, sum, min, max and even user-defined functions can be applied>
Nejjednodušším příkladem je součet matrice přes všechny sloupce. Kód apply (m1, 2, sum) použije funkci sum na matici 5x6 a vrátí součet každého sloupce přístupného v datové sadě.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Výstup:
Osvědčený postup: Před tiskem do konzoly uložte hodnoty.
funkce lapply ()
Funkce lapply () je užitečná pro provádění operací s objekty seznamu a vrací objekt seznamu se stejnou délkou původní sady. lappy () vrací seznam podobné délky jako objekt vstupního seznamu, jehož každý prvek je výsledkem použití FUN na odpovídající prvek seznamu. lapply () bere jako vstup seznam, vektor nebo datový rámec a dává výstup v seznamu.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
l in lapply () znamená seznam. Rozdíl mezi lapply () a apply () leží mezi výstupním návratem. Výstupem lapply () je seznam. lapply () lze použít pro jiné objekty, jako jsou datové rámce a seznamy.
funkce lapply () nepotřebuje MARGIN.
Velmi snadným příkladem může být změna hodnoty řetězce matice na malá písmena pomocí funkce tolower. Sestavujeme matici se jmény slavných filmů. Název je ve velkém formátu.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Výstup:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
K převedení seznamu na vektor můžeme použít unlist ().
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Výstup:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
funkce sapply ()
Funkce sapply () bere jako vstup seznam, vektor nebo datový rámec a poskytuje výstup ve vektoru nebo matici. Je to užitečné pro operace s objekty seznamu a vrací objekt seznamu se stejnou délkou původní sady. Funkce sapply () provádí stejnou práci jako funkce lapply (), ale vrací vektor.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Můžeme měřit minimální rychlost a brzdné vzdálenosti automobilů z datové sady automobilů.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Výstup:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Výstup:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Výstup:
## $speed## [1] 25## $dist## [1] 120
smxcars
Výstup:
## speed dist## 25 120
Můžeme použít vestavěnou funkci uživatele do lapply () nebo sapply (). Vytvoříme funkci s názvem avg pro výpočet průměru minima a maxima vektoru.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Výstup
## speed dist## 14.5 61.0
Funkce sapply () je efektivnější než lapply () ve vráceném výstupu, protože sapply () ukládá hodnoty přímo do vektoru. V dalším příkladu uvidíme, že tomu tak není vždy.
Můžeme shrnout rozdíl mezi apply (), sapply () a `lapply () v následující tabulce:
Funkce |
Argumenty |
Objektivní |
Vstup |
Výstup |
---|---|---|---|---|
aplikovat |
použít (x, MARGIN, FUN) |
Použijte funkci na řádky, sloupce nebo obojí |
Datový rámec nebo matice |
vektor, seznam, pole |
lapply |
lapply (X, FUN) |
Použít funkci na všechny prvky vstupu |
Seznam, vektor nebo datový rámec |
seznam |
sapply |
sappy (X FUN) |
Použít funkci na všechny prvky vstupu |
Seznam, vektor nebo datový rámec |
vektor nebo matice |
Vektor řezu
K rozdělení datového rámce můžeme použít lapply () nebo sapply () zaměnitelné. Vytvoříme funkci below_average (), která vezme vektor číselných hodnot a vrátí vektor, který obsahuje pouze hodnoty, které jsou přísně nad průměrem. Porovnáváme oba výsledky s identickou funkcí ().
below_ave <- function(x) {ave <- mean(x)return(x[x > ave])}dt_s<- sapply(dt, below_ave)dt_l<- lapply(dt, below_ave)identical(dt_s, dt_l)
Výstup:
## [1] TRUE
funkce tapply ()
tapply () vypočítá míru (průměr, medián, min, max atd.) nebo funkci pro každou proměnnou faktoru ve vektoru. Je to velmi užitečná funkce, která vám umožní vytvořit podmnožinu vektoru a poté použít některé funkce na každou z podmnožiny.
tapply(X, INDEX, FUN = NULL)Arguments:-X: An object, usually a vector-INDEX: A list containing factor-FUN: Function applied to each element of x
Součástí práce datového vědce nebo výzkumného pracovníka je výpočet souhrnů proměnných. Například změřte průměrná nebo skupinová data na základě charakteristiky. Většina dat je seskupena podle ID, města, zemí atd. Shrnutí nad skupinou odhalí zajímavější vzorce.
Abychom pochopili, jak to funguje, použijeme datovou sadu iris. Tato datová sada je ve světě strojového učení velmi známá. Účelem této datové sady je předpovědět třídu každého ze tří druhů květů: Sepal, Versicolor, Virginica. Datová sada shromažďuje informace o každém druhu o jejich délce a šířce.
Jako předchozí práci můžeme vypočítat medián délky pro každý druh. tapply () je rychlý způsob provedení tohoto výpočtu.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Výstup:
## setosa versicolor virginica## 3.4 2.8 3.0