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:

Apply() függvény példa R-ben
Apply() függvény példa R-ben

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