Apply (), lapply (), sapply (), tapply () Funkce v R s příklady

Obsah:

Anonim

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