Bu eğitim, apply () işlev koleksiyonunu tanıtmayı amaçlamaktadır. Apply () işlevi tüm koleksiyonların en temel olanıdır. Ayrıca sapply (), lapply () ve tapply () öğelerini de öğreneceğiz. Başvuru koleksiyonu, döngünün bir ikamesi olarak görülebilir.
R'yi Anaconda ile yüklerseniz , apply () koleksiyonu r essential paketiyle birlikte gelir. Apply () işlevi, bir nesne koleksiyonunda (veri çerçevesi, liste, vektör vb.) Yedekli uygulama gerçekleştirmek için birçok işlevle beslenebilir. Apply () işlevinin amacı öncelikle döngü yapılarının açık kullanımlarından kaçınmaktır. Bir girdi listesi, matris veya dizi için kullanılabilirler ve bir işlevi uygulayabilirler. Herhangi bir işlev apply () 'a aktarılabilir.
Bu eğitimde öğreneceksiniz
- uygula () işlevi
- lapply () işlevi
- sapply () işlevi
- Dilim vektör
- tapply () işlevi
uygula () işlevi
apply () girdi olarak Veri çerçevesi veya matrisi alır ve vektör, liste veya dizide çıktı verir. apply () Fonksiyonu, öncelikle döngü yapılarının açık kullanımlarından kaçınmak için kullanılır. Tüm koleksiyonların en temel olanı bir matris üzerinde kullanılabilir.
Bu işlev 3 argüman alır:
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>
En basit örnek, tüm sütunlar üzerinde bir matris toplamaktır. Uygulama kodu (m1, 2, toplam), toplam işlevini 5x6 matrisine uygulayacak ve veri kümesinde erişilebilen her sütunun toplamını döndürecektir.
m1 <- matrix(C<-(1:10),nrow=5, ncol=6)m1a_m1 <- apply(m1, 2, sum)a_m1
Çıktı:
En iyi uygulama: Konsola yazdırmadan önce değerleri kaydedin.
lapply () işlevi
lapply () işlevi, liste nesneleri üzerinde işlem yapmak için kullanışlıdır ve orijinal kümeyle aynı uzunlukta bir liste nesnesi döndürür. lappy (), giriş listesi nesnesiyle benzer uzunlukta bir liste döndürür; her bir öğesi, listenin karşılık gelen öğesine FUN uygulamasının sonucudur. lapply () girdi olarak liste, vektör veya veri çerçevesini alır ve liste halinde çıktı verir.
lapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
lapply () içindeki l liste anlamına gelir. Lapply () ve apply () arasındaki fark, çıktı dönüşü arasındadır. Lapply () çıktısı bir listedir. lapply (), veri çerçeveleri ve listeler gibi diğer nesneler için kullanılabilir.
lapply () işlevinin MARGIN'e ihtiyacı yoktur.
Çok kolay bir örnek, bir matrisin dize değerini tolower işleviyle küçük harfe değiştirmek olabilir. Ünlü filmlerin adıyla bir matris oluşturuyoruz. İsim büyük harf formatındadır.
movies <- c("SPYDERMAN","BATMAN","VERTIGO","CHINATOWN")movies_lower <-lapply(movies, tolower)str(movies_lower)
Çıktı:
## List of 4## $:chr"spyderman"## $:chr"batman"## $:chr"vertigo"## $:chr"chinatown"
Listeyi bir vektöre dönüştürmek için unlist () kullanabiliriz.
movies_lower <-unlist(lapply(movies,tolower))str(movies_lower)
Çıktı:
## chr [1:4] "spyderman" "batman" "vertigo" "chinatown"
sapply () işlevi
sapply () işlevi liste, vektör veya veri çerçevesini girdi olarak alır ve vektör veya matriste çıktı verir. Liste nesnelerindeki işlemler için kullanışlıdır ve aynı uzunluktaki orijinal kümeye sahip bir liste nesnesi döndürür. sapply () işlevi, lapply () işleviyle aynı işi yapar ancak bir vektör döndürür.
sapply(X, FUN)Arguments:-X: A vector or an object-FUN: Function applied to each element of x
Arabaların minimum hızını ve durma mesafelerini arabalar veri setinden ölçebiliriz.
dt <- carslmn_cars <- lapply(dt, min)smn_cars <- sapply(dt, min)lmn_cars
Çıktı:
## $speed## [1] 4## $dist## [1] 2
smn_cars
Çıktı:
## speed dist## 4 2
lmxcars <- lapply(dt, max)smxcars <- sapply(dt, max)lmxcars
Çıktı:
## $speed## [1] 25## $dist## [1] 120
smxcars
Çıktı:
## speed dist## 25 120
Kullanıcı yerleşik işlevini lapply () veya sapply () içine kullanabiliriz. Vektörün minimum ve maksimum ortalamasını hesaplamak için avg adında bir fonksiyon oluşturuyoruz.
avg <- function(x) {( min(x) + max(x) ) / 2}fcars <- sapply(dt, avg)fcars
Çıktı
## speed dist## 14.5 61.0
sapply () işlevi, döndürülen çıktıda lapply () işlevinden daha verimlidir çünkü sapply () değerleri direclty olarak bir vektöre kaydeder. Bir sonraki örnekte, bunun her zaman böyle olmadığını göreceğiz.
Apply (), sapply () ve `lapply () arasındaki farkı aşağıdaki tabloda özetleyebiliriz:
Fonksiyon |
Argümanlar |
Amaç |
Giriş |
Çıktı |
---|---|---|---|---|
uygulamak |
uygula (x, MARGIN, EĞLENCE) |
Satırlara veya sütunlara veya her ikisine birden bir işlev uygulayın |
Veri çerçevesi veya matris |
vektör, liste, dizi |
lapply |
lapply (X, EĞLENCE) |
Girişin tüm öğelerine bir işlev uygulayın |
Liste, vektör veya veri çerçevesi |
liste |
saf |
özlü (X EĞLENCE) |
Girişin tüm öğelerine bir işlev uygulayın |
Liste, vektör veya veri çerçevesi |
vektör veya matris |
Dilim vektör
Bir veri çerçevesini dilimlemek için lapply () veya sapply () değiştirilebilir. Sayısal değerlerden oluşan bir vektör alan ve yalnızca ortalamanın kesinlikle üzerinde olan değerleri içeren bir vektör veren bir fonksiyon, under_average () oluşturuyoruz. Her iki sonucu da özdeş () işleviyle karşılaştırıyoruz.
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)
Çıktı:
## [1] TRUE
tapply () işlevi
tapply () , bir vektördeki her faktör değişkeni için bir ölçü (ortalama, medyan, min, maks, vb.) veya bir fonksiyon hesaplar. Bir vektörün alt kümesini oluşturmanıza ve ardından alt kümelerin her birine bazı işlevler uygulamanıza izin veren çok kullanışlı bir işlevdir.
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
Bir veri bilimcinin veya araştırmacının işinin bir kısmı, değişkenlerin özetlerini hesaplamaktır. Örneğin, bir özelliğe göre ortalama veya grup verilerini ölçün. Verilerin çoğu kimliğe, şehre, ülkelere vb. Göre gruplandırılmıştır. Grup üzerinden özetlemek, daha ilginç kalıpları ortaya çıkarır.
Nasıl çalıştığını anlamak için iris veri setini kullanalım. Bu veri kümesi, makine öğrenimi dünyasında çok ünlüdür. Bu veri kümesinin amacı, üç çiçek türünün her birinin sınıfını tahmin etmektir: Sepal, Versicolor, Virginica. Veri kümesi, her tür için uzunlukları ve genişlikleri hakkında bilgi toplar.
Önceki bir çalışma olarak, her tür için uzunluğun medyanını hesaplayabiliriz. tapply (), bu hesaplamayı gerçekleştirmenin hızlı bir yoludur.
data(iris)tapply(iris$Sepal.Width, iris$Species, median)
Çıktı:
## setosa versicolor virginica## 3.4 2.8 3.0