Apply (), lapply (), sapply (), tapply () Funkcia v R s príkladmi

Obsah:

Anonim

Cieľom tohto tutoriálu je predstaviť kolekciu funkcií apply (). Funkcia apply () je najzákladnejšia zo všetkých kolekcií. Dozvieme sa tiež sapply (), lapply () a tapply (). Kolekciu s aplikáciami je možné považovať za náhradu slučky.

Kolekcia apply () je dodávaná s balíkom r essential, ak inštalujete R s Anacondou. Funkciu apply () je možné napájať mnohými funkciami na vykonávanie redundantnej aplikácie na kolekciu objektov (dátový rámec, zoznam, vektor atď.). Účelom apply () je predovšetkým vyhnúť sa explicitnému použitiu konštrukcií slučiek. Môžu byť použité pre vstupný zoznam, maticu alebo pole a použiť funkciu. Akákoľvek funkcia môže byť odovzdaná do apply ().

V tomto návode sa naučíte

  • funkcia apply ()
  • funkcia lapply ()
  • funkcia sapply ()
  • Vektor rezu
  • funkcia tapply ()

funkcia apply ()

apply () berie dátový rámec alebo maticu ako vstup a dáva výstup vo vektore, zozname alebo v poli. Funkcia apply () sa primárne používa na zabránenie explicitnému použitiu konštrukcií slučiek. Je to najzákladnejšia zo všetkých kolekcií, ktoré sa dajú použiť nad maticu.

Táto funkcia 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>

Najjednoduchším príkladom je súčet matíc vo všetkých stĺpcoch. Kód apply (m1, 2, sum) použije funkciu sum na maticu 5x6 a vráti súčet každého stĺpca prístupného v množine údajov.

m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1

Výkon:

Osvedčený postup: Pred vytlačením do konzoly uložte hodnoty.

funkcia lapply ()

Funkcia lapply () je užitočná na vykonávanie operácií s objektmi zoznamu a vracia objekt zoznamu s rovnakou dĺžkou pôvodnej množiny. lappy () vráti zoznam podobnej dĺžky ako objekt vstupného zoznamu, ktorého každý prvok je výsledkom použitia funkcie FUN na zodpovedajúci prvok zoznamu. lapply () berie ako vstup zoznam, vektor alebo dátový rámec a dáva výstup v zozname.

lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x

l v lapply () znamená zoznam. Rozdiel medzi lapply () a apply () spočíva medzi výstupným návratom. Výstupom parametra lapply () je zoznam. lapply () je možné použiť pre iné objekty, ako sú dátové rámce a zoznamy.

funkcia lapply () nevyžaduje MARGIN.

Veľmi jednoduchým príkladom môže byť zmena hodnoty reťazca matice na malé písmená pomocou funkcie tolower. Zostavili sme maticu s názvom slávnych filmov. Názov je vo formáte veľkých písmen.

movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)

Výkon:

## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"

Pomocou funkcie unlist () môžeme zoznam previesť na vektor.

movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)

Výkon:

## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"

funkcia sapply ()

Funkcia sapply () berie ako vstup zoznam, vektor alebo dátový rámec a poskytuje výstup vo vektore alebo matici. Je to užitočné pre operácie so zoznamovými objektmi a vracia zoznamový objekt rovnakej dĺžky pôvodnej množiny. Funkcia sapply () robí rovnakú prácu ako funkcia lapply (), ale vracia vektor.

sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x

Z dátového súboru automobilov môžeme merať minimálnu rýchlosť a brzdnú dráhu automobilov.

dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars

Výkon:

## $speed## [1] 4## $dist## [1] 2
smn_cars

Výkon:

## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars

Výkon:

## $speed## [1] 25## $dist## [1] 120
smxcars

Výkon:

## speed dist## 25 120

Môžeme použiť vstavanú funkciu používateľa do lapply () alebo sapply (). Vytvoríme funkciu s názvom avg na výpočet priemeru minima a maxima vektora.

avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars

Výkon

## speed dist## 14.5 61.0

Funkcia sapply () je vo výstupe vrátenom efektívnejšou ako lapply (), pretože sapply () ukladá hodnoty priamo do vektora. V nasledujúcom príklade uvidíme, že to tak nie je vždy.

V nasledujúcej tabuľke môžeme zhrnúť rozdiel medzi apply (), sapply () a `lapply ():

Funkcia

Argumenty

Cieľ

Vstup

Výkon

uplatniť

platí (x, MARGIN, FUN)

Aplikujte funkciu na riadky alebo stĺpce alebo na oba

Dátový rámec alebo matica

vektor, zoznam, pole

lapply

lapply (X, FUN)

Použiť funkciu na všetky prvky vstupu

Zoznam, vektor alebo dátový rámec

zoznam

šťavnatý

sappy (X FUN)

Použiť funkciu na všetky prvky vstupu

Zoznam, vektor alebo dátový rámec

vektor alebo matica

Vektor rezu

Na rozdelenie dátového rámca môžeme použiť lapply () alebo sapply (). Vytvoríme funkciu below_average (), ktorá prevezme vektor číselných hodnôt a vráti vektor, ktorý obsahuje iba hodnoty, ktoré sú striktne nad priemerom. Porovnávame oba výsledky s identickou () funkciou.

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ýkon:

## [1] TRUE

funkcia tapply ()

tapply () počíta mieru (priemer, medián, min., max. atď.) alebo funkciu pre každú premennú faktora vo vektore. Je to veľmi užitočná funkcia, ktorá vám umožní vytvoriť podmnožinu vektora a potom použiť niektoré funkcie na každú 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

Súčasťou práce dátového vedca alebo výskumného pracovníka je vypočítať súhrny premenných. Napríklad zmerajte priemerné alebo skupinové údaje na základe charakteristiky. Väčšina údajov je zoskupená podľa ID, mesta, krajín atď. Zhrnutie nad skupinou odhalí zaujímavejšie vzorce.

Aby sme pochopili, ako to funguje, použijeme množinu údajov o clone. Táto množina údajov je vo svete strojového učenia veľmi známa. Účelom tohto súboru údajov je predpovedať triedu každého z troch druhov kvetov: Sepal, Versicolor, Virginica. Dataset zhromažďuje informácie o každom druhu o ich dĺžke a šírke.

Ako predchádzajúcu prácu môžeme vypočítať medián dĺžky každého druhu. tapply () je rýchly spôsob vykonania tohto výpočtu.

data(iris)tapply(iris$Sepal.Width, iris$Species, median)

Výkon:

## setosa versicolor virginica## 3.4 2.8 3.0