Šīs apmācības mērķis ir ieviest pieteikumu () funkciju kolekciju. Funkcija Apply () ir visvienkāršākā no visām kolekcijām. Mēs arī iemācīsimies sapply (), lapply () un tapply (). Lietošanas kolekciju var uzskatīt par cilpa aizstājēju.
Ja instalējat R ar Anaconda, pieteikuma () kolekcija ir komplektā ar r būtisku pakotni. Funkciju Apply () var ievadīt ar daudzām funkcijām, lai veiktu lieku lietošanu objekta kolekcijai (datu ietvars, saraksts, vektors utt.) Pieteikuma () mērķis galvenokārt ir izvairīties no skaidras cilpu konstrukciju izmantošanas. Tos var izmantot ievades sarakstam, matricai vai masīvam, un lietot funkciju. Jebkuru funkciju var nodot lietošanai ().
Šajā apmācībā jūs uzzināsiet
- Apply () funkcija
- funkcija lapply ()
- funkcija sapply ()
- Šķēles vektors
- funkcija ()
Apply () funkcija
Apply () ņem datu rāmi vai matricu kā ievadi un dod izvadi vektorā, sarakstā vai masīvā. Apply () Funkciju galvenokārt izmanto, lai izvairītos no skaidras cilpas konstrukciju izmantošanas. Tas ir visvienkāršākais no visām kolekcijām, kuras var izmantot virs matricas.
Šai funkcijai nepieciešami 3 argumenti:
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>
Vienkāršākais piemērs ir summēt matricu visās kolonnās. Piemērojamais kods (m1, 2, summa) piemēros summas funkciju matricai 5x6 un atgriezīs katras datu kopā pieejamās kolonnas summu.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Izeja:
Labākā prakse: saglabājiet vērtības pirms to drukāšanas konsolē.
funkcija lapply ()
Funkcija lapply () ir noderīga, lai veiktu darbības ar saraksta objektiem, un atgriež saraksta objektu ar tāda paša garuma sākotnējo kopu. lappy () atgriež līdzīga garuma sarakstu kā ievades saraksta objekts, kura katrs elements ir rezultāts FUN piemērošanai attiecīgajam saraksta elementam. lapply () ņem sarakstu, vektoru vai datu rāmi kā ievadi un dod izvadi sarakstā.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
l in lapply () nozīmē sarakstu. Atšķirība starp lapply () un Apply () ir starp izejas atdevi. Lapply () izeja ir saraksts. lapply () var izmantot citiem objektiem, piemēram, datu rāmjiem un sarakstiem.
funkcijai lapply () nav nepieciešama MARGIN.
Ļoti vienkāršs piemērs var būt mainīt matricas virknes vērtību uz mazajiem burtiem ar tolower funkciju. Mēs izveidojam matricu ar slaveno filmu nosaukumu. Nosaukums ir lielo burtu formāts.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Izeja:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Mēs varam izmantot unlist (), lai sarakstu pārveidotu par vektoru.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Izeja:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
funkcija sapply ()
Funkcija sapply () kā sarakstu ievada sarakstu, vektoru vai datu rāmi un dod izvadi vektorā vai matricā. Tas ir noderīgi darbībām ar saraksta objektiem un atgriež saraksta objektu ar tāda paša garuma sākotnējo kopu. funkcija sapply () veic to pašu darbu kā funkcija lapply (), bet atgriež vektoru.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
No automašīnu datu kopas mēs varam izmērīt automašīnu minimālo ātrumu un apstāšanās attālumus.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Izeja:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Izeja:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Izeja:
## $speed## [1] 25## $dist## [1] 120
smxcars
Izeja:
## speed dist## 25 120
Mēs varam izmantot lietotāja iebūvēto funkciju lapply () vai sapply (). Mēs izveidojam funkciju ar nosaukumu avg, lai aprēķinātu vektora minimuma un maksimuma vidējo vērtību.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Rezultāts
## speed dist## 14.5 61.0
funkcija sapply () ir efektīvāka nekā atgrieztajā izejā esošā lapply () funkcija, jo sapply () vērtības glabājas tieši vektorā. Nākamajā piemērā mēs redzēsim, ka tas ne vienmēr notiek.
Šajā tabulā mēs varam apkopot atšķirību starp Apply (), sapply () un `lapply ():
Funkcija |
Argumenti |
Mērķis |
Ievade |
Rezultāts |
---|---|---|---|---|
pieteikties |
lietot (x, MARGIN, FUN) |
Lietojiet funkciju rindām vai kolonnām vai abiem |
Datu rāmis vai matrica |
vektors, saraksts, masīvs |
lapply |
lapply (X, FUN) |
Lietojiet funkciju visiem ievades elementiem |
Saraksts, vektors vai datu rāmis |
sarakstā |
sapply |
laimīgs (X FUN) |
Lietojiet funkciju visiem ievades elementiem |
Saraksts, vektors vai datu rāmis |
vektors vai matrica |
Šķēles vektors
Datu rāmja sagriešanai mēs varam izmantot lapply () vai sapply () savstarpēji aizstājamus. Mēs izveidojam funkciju zemāk par vidējo (), kas ņem skaitlisko vērtību vektoru un atgriež vektoru, kurā ir tikai vērtības, kas ir stingri virs vidējā. Abus rezultātus mēs salīdzinām ar identisko () funkciju.
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)
Izeja:
## [1] TRUE
funkcija ()
tapply () aprēķina katra vektora faktora mainīgā lielumu (vidējo, vidējo, min, max utt ...) vai funkciju. Tā ir ļoti noderīga funkcija, kas ļauj jums izveidot vektora apakškopu un pēc tam pielietot dažas funkcijas katrai apakškopai.
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
Daļa no datu zinātnieka vai pētnieku darba ir aprēķināt mainīgo lielumu kopsavilkumus. Piemēram, izmēra vidējos vai grupas datus, pamatojoties uz raksturlielumu. Lielākā daļa datu ir sagrupēti pēc ID, pilsētas, valstīm utt. Apkopojot grupu, atklājas interesantāki modeļi.
Lai saprastu, kā tas darbojas, izmantosim varavīksnenes datu kopu. Šī datu kopa ir ļoti slavena mašīnmācīšanās pasaulē. Šīs datu kopas mērķis ir paredzēt katras no trim ziedu sugām klasi: Sepal, Versicolor, Virginica. Datu kopa apkopo informāciju par katru sugu par to garumu un platumu.
Kā iepriekšēju darbu mēs varam aprēķināt katras sugas garuma mediānu. tapply () ir ātrs veids, kā veikt šo aprēķinu.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Izeja:
## setosa versicolor virginica## 3.4 2.8 3.0