R apply(), lapply(), sapply(), tapply() esimerkkeineen

Tรคmรคn opetusohjelman tarkoituksena on esitellรค apply()-funktiokokoelma. Apply()-funktio on yksinkertaisin kaikista kokoelmasta. Opimme myรถs sapply(), lapply() ja tapply(). Sovelluskokoelmaa voidaan pitรครค silmukan korvikkeena.

Application()-kokoelma on mukana r vรคlttรคmรคtรถn paketti jos sinรค asenna R Anacondan kanssa. Apply in R -toimintoon voidaan syรถttรครค monia toimintoja redundanttien sovellusten suorittamiseksi objektikokoelmalle (tietokehys, luettelo, vektori jne.). Sovelluksen():n tarkoitus on ensisijaisesti vรคlttรครค silmukkarakenteiden eksplisiittistรค kรคyttรถรค. Niitรค voidaan kรคyttรครค syรถteluettelona, โ€‹โ€‹matriisina tai taulukona ja soveltaa funktiota. Mikรค tahansa funktio voidaan siirtรครค toimintoon apply().

apply()-funktio

Kรคytรค() ottaa tietokehyksen tai matriisin syรถtteenรค ja antaa ulostulon vektorina, listana tai matriisina. Kรคytรค toiminto R:ssรค kรคytetรครคn ensisijaisesti vรคlttรคmรครคn silmukkarakenteiden eksplisiittistรค kรคyttรถรค. Se on yksinkertaisin kaikista kokoelmista, jota voidaan kรคyttรครค matriisin yli.

Tรคmรค funktio ottaa 3 argumenttia:

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>

Yksinkertaisin esimerkki on laskea yhteen matriisi kaikista sarakkeista. Koodi apply(m1, 2, sum) kรคyttรครค summafunktiota matriisissa 5ร—6 ja palauttaa jokaisen tietojoukossa kรคytettรคvissรค olevan sarakkeen summan.

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

lรคhtรถ:

Apply()-funktioesimerkki R:ssรค
example()-funktion esimerkki R:ssรค

Paras kรคytรคntรถ: Tallenna arvot ennen kuin tulostat ne konsoliin.

lapply()-funktio

lapply() -toiminto on hyรถdyllinen suoritettaessa toimintoja listaobjekteille ja palauttaa listaobjektin, joka on samanpituinen kuin alkuperรคinen joukko. lappy() palauttaa samanpituisen listan kuin syรถteluetteloobjekti, jonka jokainen elementti on seurausta FUN:n soveltamisesta vastaavaan listan elementtiin. Lapply in R ottaa syรถtteenรค listan, vektorin tai datakehyksen ja antaa tulosteen listassa.

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

l sanoissa lapply() tarkoittaa listaa. Ero lapply():n ja apply():n vรคlillรค on lรคhtรถpalautuksen vรคlillรค. Lapply():n tulos on lista. lapply() voidaan kรคyttรครค muille objekteille, kuten tietokehyksille ja listoille.

lapply()-funktio ei tarvitse MARGIN.

Hyvin helppo esimerkki voi olla matriisin merkkijonon arvon muuttaminen pieneksi tolower-funktiolla. Rakennamme matriisin kuuluisien elokuvien nimistรค. Nimi on isoilla kirjaimilla.

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

lรคhtรถ:

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

Voimme kรคyttรครค unlist()-komentoa muuntaaksesi listan vektoriksi.

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

lรคhtรถ:

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

sapply()-funktio

apply() toiminto ottaa listan, vektorin tai datakehyksen syรถtteenรค ja antaa ulostulon vektorissa tai matriisi. Se on hyรถdyllinen listaobjektien operaatioissa ja palauttaa listaobjektin, joka on samanpituinen kuin alkuperรคinen joukko. R:n sapply-funktio tekee saman tyรถn kuin lapply()-funktio, mutta palauttaa vektorin.

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

Voimme mitata autojen miniminopeuden ja pysรคhdysmatkoja autotietojoukosta.

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

lรคhtรถ:

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

lรคhtรถ:

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

lรคhtรถ:

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

lรคhtรถ:

## speed  dist 
##    25   120

Voimme kรคyttรครค kรคyttรคjรคn sisรครคnrakennettua funktiota lapply()- tai sapply()-funktioon. Luomme funktion nimeltรค avg laskemaan vektorin minimi- ja maksimiarvojen keskiarvon.

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

ulostulo

## speed  dist
##  14.5  61.0

Sapply R:ssรค on tehokkaampi kuin lapply() palautetussa lรคhdรถssรค, koska sapply() tallentaa arvot suoraan vektoriin. Seuraavassa esimerkissรค nรคemme, ettรค nรคin ei aina ole.

Voimme tiivistรครค eron apply(), sapply() ja `lapply() vรคlillรค seuraavassa taulukossa:

Toiminto argumentit Tavoite panos ulostulo
kรคyttรครค soveltaa (x, MARGIN, FUN) Kรคytรค funktiota riveihin tai sarakkeisiin tai molempiin Tietokehys tai matriisi vektori, luettelo, taulukko
lapply lapply (X, FUN) Kรคytรค funktiota kaikkiin syรถtteen elementteihin Lista, vektori tai datakehys lista
soveltaa sovelle (X, FUN) Kรคytรค funktiota kaikkiin syรถtteen elementteihin Lista, vektori tai datakehys vektori tai matriisi

Viipaletta vektori

Voimme kรคyttรครค lapply()- tai sapply()-muuttujaa datakehyksen leikkaamiseen. Luomme funktion, alle_average(), joka ottaa numeeristen arvojen vektorin ja palauttaa vektorin, joka sisรคltรครค vain arvot, jotka ovat ehdottomasti keskiarvon ylรคpuolella. Vertaamme molempia tuloksia identtisen()-funktion kanssa.

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)

lรคhtรถ:

## [1] TRUE

tapply()-funktio

tapply() laskee arvon (keskiarvo, mediaani, min, max jne.) tai funktion kullekin vektorin tekijรคmuuttujalle. Se on erittรคin hyรถdyllinen funktio, jonka avulla voit luoda vektorin osajoukon ja sitten kรคyttรครค joitain toimintoja jokaiseen osajoukkoon.

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

Osa datatieteilijรคn tai tutkijan tyรถtรค on laskea yhteenvetoja muuttujista. Mittaa esimerkiksi keskiarvo tai ryhmรคtiedot ominaisuuden perusteella. Suurin osa tiedoista on ryhmitelty tunnuksen, kaupungin, maiden ja niin edelleen mukaan. Ryhmรคn yhteenvedon tekeminen paljastaa mielenkiintoisempia malleja.

Ymmรคrtรครคksemme, miten se toimii, kรคytetรครคn iiristietojoukkoa. Tรคmรค tietojoukko on erittรคin kuuluisa koneoppimisen maailmassa. Tรคmรคn tietojoukon tarkoituksena on ennustaa kunkin kolmen kukkalajin luokka: Sepal, Versicolor, Virginica. Aineisto kerรครค jokaisesta lajista tietoa niiden pituudesta ja leveydestรค.

Aiempana tyรถnรค voimme laskea kunkin lajin pituuden mediaanin. Napauta R:ssรค on nopea tapa suorittaa tรคmรค laskenta.

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

lรคhtรถ:

##     setosa versicolor  virginica 
##        3.4        2.8        3.0

Tiivistรค tรคmรค viesti seuraavasti: