Örneklerle R'de application(), lapply(), sapply(), tapply() Fonksiyonu

Bu eğitim, Apply() işlev koleksiyonunu tanıtmayı amaçlamaktadır. Apply() işlevi tüm koleksiyonların en temelidir. Ayrıca sapply(), lapply() ve tapply()'yi de öğreneceğiz. Apply koleksiyonu döngünün yerine geçebilir.

Apply() koleksiyonu şununla birlikte gelir: önemli eğer paket Anaconda ile R'yi yükleyin. Apply in R işlevi, bir nesne koleksiyonu (veri çerçevesi, liste, vektör vb.) üzerinde 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 giriş listesi, matris veya dizi için kullanılabilirler ve bir işlev uygulayabilirler. Apply() işlevine herhangi bir işlev aktarılabilir.

uygulama() işlevi

uygulamak() Veri çerçevesini veya matrisini girdi olarak alır ve vektör, liste veya dizi halinde çıktı verir. Uygula R'deki işlev öncelikle döngü yapılarının açık kullanımlarını önlemek için kullanılır. Bir matris üzerinde kullanılabilecek tüm koleksiyonların en temelidir.

Bu fonksiyon 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, bir matrisin tüm sütunlar üzerinden toplamını almaktır. Apply(m1, 2, sum) kodu, toplam fonksiyonunu 5×6 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)
m1
a_m1 <- apply(m1, 2, sum)
a_m1

Çıktı:

R'de Apply() İşlev Örneği
R'de application() işlevi örneği

En iyi uygulama: Konsola yazdırmadan önce değerleri saklayın.

lapply() işlevi

lapply() işlevi, liste nesneleri üzerinde işlemler gerçekleştirmek için kullanışlıdır ve orijinal kümeyle aynı uzunlukta bir liste nesnesi döndürür. lappy(), giriş listesi nesnesine benzer uzunlukta bir liste döndürür; bu listenin her bir öğesi, listenin karşılık gelen öğesine FUN uygulamasının sonucudur. R'deki Lapply girdi olarak liste, vektör veya veri çerçevesini alır ve listede çıktı verir.

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

lapply()'daki l, liste anlamına gelir. lapply() ve application() arasındaki fark, çıktı dönüşü arasındadır. lapply() fonksiyonunun çı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 isimleriyle bir matris oluşturuyoruz. Ad büyük harf biçimindedir.

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() işlevini kullanabiliriz.

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

Çıktı:

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

sapply() işlevi

sapply() fonksiyon girdi olarak listeyi, vektörü veya veri çerçevesini alır ve vektör veya olarak çıktı verir. matris. Liste nesnelerindeki işlemler için kullanışlıdır ve orijinal kümeyle aynı uzunlukta bir liste nesnesi döndürür. R'deki 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

Araba veri setinden arabaların minimum hızını ve durma mesafelerini ölçebiliyoruz.

dt <- cars
lmn_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

lapply() veya sapply()'a kullanıcı tarafından yerleşik bir fonksiyon kullanabiliriz. Vektörün minimum ve maksimumunun ortalamasını hesaplamak için avg adında bir fonksiyon oluştururuz.

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

Çıktı

## speed  dist
##  14.5  61.0

R'deki Sapply, döndürülen çıktıda lapply()'den daha verimlidir çünkü sapply(), değerleri doğrudan bir vektöre depolar. Bir sonraki örnekte bunun her zaman böyle olmadığını göreceğiz.

apply(), sapply() ve `lapply() arasındaki farkları aşağıdaki tabloda özetleyebiliriz:

işlev Argümanlar Nesnel Giriş Çıktı
uygulamak uygula(x, MARJİN, EĞLENCE) Satırlara, sütunlara veya her ikisine birden işlev uygulama Veri çerçevesi veya matris vektör, liste, dizi
lapply lapply(X, EĞLENCE) Girişin tüm öğelerine bir işlev uygulama Liste, vektör veya veri çerçevesi liste
özlü sapply(X, EĞLENCE) Girişin tüm öğelerine bir işlev uygulama 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ştirilebilirlerini kullanabiliriz. 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 döndüren, Below_average() adında bir fonksiyon yaratıyoruz. Her iki sonucu da özdeş() işleviyle karşılaştırırız.

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

hafifçe vur() bir vektördeki her faktör değişkeni için bir ölçü (ortalama, medyan, minimum, maksimum vb.) veya bir fonksiyon hesaplar. Bir vektörün alt kümesini oluşturmanıza ve ardından her bir alt kümeye bazı işlevler uygulamanıza olanak tanıyan ç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 ortalamayı ölçün veya verileri bir özelliğe göre gruplayın. Verilerin çoğu kimlik, şehir, ülke 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 kümesini kullanalım. Bu veri kümesi makine öğrenimi dünyasında çok ünlüdür. Bu veri setinin amacı üç çiçek türünün her birinin sınıfını tahmin etmektir: Sepal, Versicolor, Virginica. Veri seti, her türün uzunluğu ve genişliği hakkında bilgi toplar.

Önceki bir çalışma olarak, her türün uzunluğunun ortancasını hesaplayabiliriz. R'de 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