R apply(), lapply(), sapply(), tapply() példákkal
Ez az oktatóanyag az apply() függvénygyűjtemény bemutatását célozza. Az apply() függvény a legalapvetőbb az összes gyűjtemény közül. Megtanuljuk a sapply(), a lapply() és a tapply()-t is. Az alkalmazásgyűjtemény a ciklus helyettesítőjeként tekinthető.
Az apply() gyűjtemény a következővel van csomagolva r lényeges csomagot, ha telepítse az R-t az Anacondával. Az Apply in R függvény számos funkcióval betáplálható, hogy redundáns alkalmazásokat hajtson végre egy objektum gyűjteményén (adatkeret, lista, vektor stb.). Az apply() célja elsősorban a hurokkonstrukciók explicit használatának elkerülése. Használhatók bemeneti listához, mátrixhoz vagy tömbhöz, és függvényt alkalmazhatnak. Bármely függvény átadható az apply()-nek.
apply() függvény
alkalmaz() adatkeretet vagy mátrixot vesz bemenetként, és a kimenetet vektorban, listában vagy tömbben adja meg. Alkalmaz funkció R-ben elsősorban a hurokkonstrukciók explicit használatának elkerülésére szolgál. Ez a legalapvetőbb az összes mátrixon keresztül használható gyűjtemény közül.
Ennek a függvénynek 3 argumentuma van:
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>
A legegyszerűbb példa az összes oszlop mátrixának összegzése. Az apply(m1, 2, sum) kód az összeg függvényt alkalmazza az 5×6 mátrixra, és visszaadja az adatkészletben elérhető minden oszlop összegét.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6) m1 a_m1 <- apply(m1, 2, sum) a_m1
output:

Legjobb gyakorlat: Tárolja az értékeket, mielőtt kinyomtatja a konzolra.
lapply() függvény
lapply() A függvény hasznos műveletek végrehajtásához listaobjektumokkal, és az eredeti halmaz hosszúságú listaobjektumát adja vissza. A lappy() a bemeneti listaobjektumhoz hasonló hosszúságú listát ad vissza, amelynek minden eleme a FUN alkalmazásának eredménye a lista megfelelő elemére. A Lapply az R-ben listát, vektort vagy adatkeretet vesz bemenetként, és kimenetet ad a listában.
lapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
Az l a lapply()-ban a listát jelenti. A lapply() és az apply() közötti különbség a kimeneti visszatérés között van. A lapply() kimenete egy lista. A lapply() használható más objektumokhoz, például adatkeretekhez és listákhoz.
lapply() függvénynek nincs szüksége MARGIN-re.
Nagyon egyszerű példa lehet egy mátrix karakterlánc-értékének módosítása kisbetűre a tolower függvénnyel. Összeállítunk egy mátrixot a híres filmek nevével. A név nagybetűs formátumú.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN") movies_lower <-lapply(movies, tolower) str(movies_lower)
output:
## List of 4 ## $:chr"spyderman" ## $:chr"batman" ## $:chr"vertigo" ## $:chr"chinatown"
Az unlist() segítségével a listát vektorrá alakíthatjuk.
movies_lower <-unlist(lapply(movies,tolower)) str(movies_lower)
output:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
apply() függvény
alkalmaz() A függvény listát, vektort vagy adatkeretet vesz be bemenetként, és a kimenetet vektorban ill mátrix. Hasznos a listaobjektumokkal végzett műveleteknél, és az eredeti halmaz hosszúságú listaobjektumát adja vissza. Az R Sapply függvény ugyanazt a munkát végzi el, mint a lapply() függvény, de egy vektort ad vissza.
sapply(X, FUN) Arguments: -X: A vector or an object -FUN: Function applied to each element of x
Az autók adatkészletéből mérhetjük az autók minimális sebességét és féktávolságát.
dt <- cars lmn_cars <- lapply(dt, min) smn_cars <- sapply(dt, min) lmn_cars
output:
## $speed ## [1] 4 ## $dist ## [1] 2
smn_cars
output:
## speed dist ## 4 2
lmxcars <- lapply(dt, max) smxcars <- sapply(dt, max) lmxcars
output:
## $speed ## [1] 25 ## $dist ## [1] 120
smxcars
output:
## speed dist ## 25 120
Használhatunk felhasználói beépített függvényt a lapply() vagy saply() függvényben. Létrehozunk egy avg nevű függvényt a vektor minimumának és maximumának átlagának kiszámításához.
avg <- function(x) { ( min(x) + max(x) ) / 2} fcars <- sapply(dt, avg) fcars
teljesítmény
## speed dist ## 14.5 61.0
Az R-ben lévő sapply hatékonyabb, mint a lapply() a visszaadott kimenetben, mivel az saply() tárolja az értékeket közvetlenül egy vektorba. A következő példában látni fogjuk, hogy ez nem mindig van így.
A következő táblázatban összegezhetjük az apply(), sapply() és `lapply() közötti különbséget:
Funkció | érvek | Objektív | Bemenet | teljesítmény |
---|---|---|---|---|
alkalmaz | alkalmazni (x, MARGIN, FUN) | Alkalmazzon függvényt a sorokra vagy oszlopokra, vagy mindkettőre | Adatkeret vagy mátrix | vektor, lista, tömb |
lapply | lapply (X, FUN) | Alkalmazzon függvényt a bemenet összes elemére | Lista, vektor vagy adatkeret | lista |
alkalmazkodik | alkalmaz (X, FUN) | Alkalmazzon függvényt a bemenet összes elemére | Lista, vektor vagy adatkeret | vektor vagy mátrix |
Szelet vektor
Használhatjuk a lapply() vagy sapply() felcserélhető függvényeket egy adatkeret szeletelésére. Létrehozunk egy under_average() függvényt, amely számértékekből álló vektort vesz fel, és egy olyan vektort ad vissza, amely csak azokat az értékeket tartalmazza, amelyek szigorúan az átlag felett vannak. Mindkét eredményt összehasonlítjuk az azonos() függvénnyel.
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)
output:
## [1] TRUE
tapply() függvény
tapply() kiszámít egy mértéket (átlag, medián, min, max stb.) vagy függvényt minden egyes faktorváltozóhoz egy vektorban. Ez egy nagyon hasznos funkció, amely lehetővé teszi egy vektor részhalmazának létrehozását, majd néhány függvény alkalmazását az egyes részhalmazokra.
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
Az adattudósok vagy kutatók munkájának része a változók összefoglalása. Például mérje meg az átlagot vagy a csoportadatokat egy jellemző alapján. Az adatok többsége azonosító, város, országok stb. szerint van csoportosítva. A csoportok összefoglalása érdekesebb mintákat tár fel.
A működésének megértéséhez használjuk az írisz adatkészletet. Ez az adatkészlet nagyon híres a gépi tanulás világában. Ennek az adatkészletnek az a célja, hogy megjósolja mind a három virágfaj osztályát: Sepal, Versicolor, Virginica. Az adatkészlet az egyes fajok hosszáról és szélességéről gyűjt információkat.
Előzetes munkaként kiszámolhatjuk az egyes fajok hosszának mediánját. Az R-ben való érintés gyors módja ennek a számításnak.
data(iris) tapply(iris$Sepal.Width, iris$Species, median)
output:
## setosa versicolor virginica ## 3.4 2.8 3.0