Ten samouczek ma na celu wprowadzenie kolekcji funkcji apply (). Funkcja apply () jest najbardziej podstawową ze wszystkich kolekcji. Nauczymy się również sapply (), lapply () i tapply (). Kolekcja Apply może być postrzegana jako substytut pętli.
Kolekcja apply () jest dołączona do pakietu r essential , jeśli instalujesz R z Anacondą. Funkcja apply () może być dostarczana z wieloma funkcjami do wykonywania redundantnych aplikacji na zbiorze obiektów (ramka danych, lista, wektor itp.). Celem metody apply () jest przede wszystkim uniknięcie jawnego użycia konstrukcji pętli. Mogą być używane jako lista wejściowa, macierz lub tablica i zastosować funkcję. Do metody apply () można przekazać dowolną funkcję.
W tym samouczku dowiesz się
- Apply (), funkcja
- funkcja lapply ()
- funkcja sapply ()
- Wektor plasterek
- funkcja tapply ()
Apply (), funkcja
Apply () pobiera ramkę danych lub macierz jako dane wejściowe i zwraca dane wyjściowe w postaci wektora, listy lub tablicy. Apply () Funkcja służy przede wszystkim do unikania jawnego użycia konstrukcji pętli. Jest to najbardziej podstawowa ze wszystkich kolekcji, która może być używana na matrycy.
Ta funkcja przyjmuje 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>
Najprostszym przykładem jest zsumowanie macierzy ze wszystkich kolumn. Kod Apply (m1, 2, sum) zastosuje funkcję sumy do macierzy 5x6 i zwróci sumę każdej kolumny dostępnej w zbiorze danych.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Wynik:
Najlepsza praktyka: zapisz wartości przed wydrukowaniem ich na konsolę.
funkcja lapply ()
Funkcja lapply () jest przydatna do wykonywania operacji na obiektach listy i zwraca obiekt listy o tej samej długości co oryginalny zestaw. lappy () zwraca listę o podobnej długości jak obiekt listy wejściowej, której każdy element jest wynikiem zastosowania FUN do odpowiedniego elementu listy. lapply () przyjmuje listę, wektor lub ramkę danych jako dane wejściowe i daje wynik w postaci listy.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
l w lapply () oznacza listę. Różnica między lapply () a apply () leży między wynikiem powrotu. Wynikiem lapply () jest lista. lapply () może być używana do innych obiektów, takich jak ramki danych i listy.
Funkcja lapply () nie potrzebuje MARGINESU.
Bardzo prostym przykładem może być zmiana wartości ciągu macierzy na małe litery z funkcją tolower. Konstruujemy matrycę z nazwami znanych filmów. Nazwa jest zapisana wielkimi literami.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Wynik:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Możemy użyć unlist (), aby przekonwertować listę na wektor.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Wynik:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
funkcja sapply ()
Funkcja sapply () pobiera listę, wektor lub ramkę danych jako dane wejściowe i daje wynik w postaci wektora lub macierzy. Jest to przydatne do operacji na obiektach list i zwraca obiekt listy o tej samej długości co oryginalny zestaw. Funkcja sapply () wykonuje to samo co funkcja lapply (), ale zwraca wektor.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Możemy zmierzyć minimalną prędkość i drogę hamowania samochodów na podstawie zbioru danych o samochodach.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Wynik:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Wynik:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Wynik:
## $speed## [1] 25## $dist## [1] 120
smxcars
Wynik:
## speed dist## 25 120
Możemy użyć wbudowanej funkcji użytkownika w lapply () lub sapply (). Tworzymy funkcję o nazwie avg, aby obliczyć średnią z minimum i maksimum wektora.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Wynik
## speed dist## 14.5 61.0
Funkcja sapply () jest bardziej wydajna niż lapply () w zwracanym wyniku, ponieważ sapply () przechowuje wartości bezpośrednio w wektorze. W następnym przykładzie zobaczymy, że nie zawsze tak jest.
Możemy podsumować różnicę między apply (), sapply () i `lapply () w poniższej tabeli:
Funkcjonować |
Argumenty |
Cel |
Wejście |
Wynik |
---|---|---|---|---|
zastosować |
zastosuj (x, MARGINES, ZABAWA) |
Zastosuj funkcję do wierszy lub kolumn lub obu |
Ramka danych lub matryca |
wektor, lista, tablica |
lapply |
lapply (X, FUN) |
Zastosuj funkcję do wszystkich elementów wejścia |
Ramka listowa, wektorowa lub ramka danych |
lista |
sapać |
soczysty (X FUN) |
Zastosuj funkcję do wszystkich elementów wejścia |
Ramka listowa, wektorowa lub ramka danych |
wektor lub macierz |
Wektor plasterek
Możemy użyć zamiennie lapply () lub sapply (), aby wyciąć ramkę danych. Tworzymy funkcję below_average (), która pobiera wektor wartości liczbowych i zwraca wektor zawierający tylko wartości ściśle powyżej średniej. Porównujemy oba wyniki z identyczną funkcją ().
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)
Wynik:
## [1] TRUE
funkcja tapply ()
tapply () oblicza miarę (średnią, medianę, min, maksimum itp.) lub funkcję dla każdej zmiennej czynnikowej w wektorze. Jest to bardzo przydatna funkcja, która pozwala utworzyć podzbiór wektora, a następnie zastosować pewne funkcje do każdego z podzbiorów.
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
Część pracy analityka danych lub badaczy polega na obliczaniu podsumowań zmiennych. Na przykład zmierz średnią lub grupuj dane w oparciu o charakterystykę. Większość danych jest pogrupowana według identyfikatora, miasta, kraju itd. Podsumowanie grupowe ujawnia bardziej interesujące wzorce.
Aby zrozumieć, jak to działa, użyjmy zestawu danych tęczówki. Ten zbiór danych jest bardzo znany w świecie uczenia maszynowego. Celem tego zbioru danych jest przewidywanie klasy każdego z trzech gatunków kwiatów: Sepal, Versicolor, Virginica. Zbiór danych zbiera informacje dla każdego gatunku o ich długości i szerokości.
W ramach wcześniejszej pracy możemy obliczyć medianę długości dla każdego gatunku. tapply () to szybki sposób wykonania tego obliczenia.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Wynik:
## setosa versicolor virginica## 3.4 2.8 3.0