3 Kardeşler: apply, sapply ve lapply

R ile yapılan analizlerin büyük bir kısmı “verileri temizle, özet çıkar ve görselleştir” döngüsünde gerçekleşiyor. Özellikle özetleme kısmında, kolon veya satır boyunca fonksiyonlar çalıştırmanız gerekebiliyor. Örneğin her bir satırdaki değerlerin tek tek ortalamasını almak gibi. Tam bu noktada size yardımcı olacak birbirine çok benzeyen 3 fonksiyondan bahsedeceğiz. Çekirdek fonksiyonlar içinde yer alan apply(), sapply() ve lapply() komutları ile tablolar içinde özet oluşturma ve tablo içindeki verileri kullanarak yeni veriler hesaplama işlemlerini kolaylıkla yapmanız mümkün. Hemen başlayalım.

apply()

Bu komut, bir matris içinde bir fonksiyonu satır veya kolon boyunca çalıştırmanıza olanak verir. Her bir satırdaki en büyük değeri bulmak için veya her bir kolondaki çift sayıların adedini bulmak için kullanabilirsiniz.

Bir örnekle başlayalım. 3 kolonlu ve 90 satırlık sayısal bir matrisimiz olsun. Örnek bir veriyi aşağıdaki komut ile oluşturalım.

> m <- matrix(data=cbind(rnorm(30, 0), rnorm(30, 2), rnorm(30, 5)), nrow=30, ncol=3)
> head(m)

           [,1]      [,2]     [,3]
[1,] -2.3424540 0.8855111 4.576827
[2,] -0.5779476 2.0543375 5.500485
[3,]  0.3769516 0.8683792 6.225503
[4,]  1.2396823 1.0660959 5.633819
[5,]  0.1290059 2.0035820 3.545680
[6,] -0.3388223 3.0728759 3.019430

Bu matris içindeki her bir satırı kendi içinde toplamak istediğimizde veya her bir kolonun ortalamasını almak istediğimizde apply() fonksiyonu kullanılabilir. Fonksiyon 3 parametre içeriyor. İlk parametrede, analiz edilecek matrisin adı belirtiliyor. İkinci parametre ise yönü belirtiyor. Eğer 1 yazılırsa satır yönünde; 2 yazılırsa kolon yönünde işlem gerçekleştiriyor.  Son parametrede ise kullanılacak fonksiyon belirtiliyor.

> apply(m, 1, mean) # Satırların ortalaması

 [1] 1.0399613 2.3256250 2.4902780 2.6465325 1.8927561 1.9178277 1.7485236 1.6124283 2.5822104
[10] 2.1186472 2.8365904 2.6393072 2.1020258 1.3398338 2.2422894 2.0629972 1.7573840 2.4668683
[19] 3.0539888 2.5660587 1.4353381 2.3527424 2.4119930 2.3412572 1.7200052 0.9781383 2.1719225
[28] 1.9140663 2.1010343 2.3138065
> apply(m, 2, mean) # Kolonların ortalaması

[1] -0.4520709  1.9604337  4.8098810

Elbette yapılacak fonksiyonlar açısından tanımlı olanları kullanmak zorunda değilsiniz. Kendi oluşturduğunuz fonksiyonları da kullanabilirsiniz. Örneğin ortalama alma fonksiyonunu elle oluşturalım.

> apply(m, 2, function(x) sum(x)/length(x))

[1] -0.4520709  1.9604337  4.8098810

Veya her bir kolondaki 2’den küçük değerlerin sayısını öğrenmek istersek aşağıdaki fonksiyonu kullanalım.

> apply(m, 2, function(x) length(x[x<2]))

[1] 30 16  0

sapply() ve lapply()

Bu küçük kardeşler aslında apply() yaptığı işin bir benzerini yapıyorlar. Tek farkı bu fonksiyonlar, matris yerine vektör veya liste nesneleri ile çalışırlar. sapply() veri çıktılarını vektör olarak verirken, lapply() ise çıktıları liste olarak veriyor.

> sapply(1:3, function(x) x^2)
[1] 1 4 9
> lapply(1:3, function(x) x^2)
[[1]]
[1] 1

[[2]]
[1] 4

[[3]]
[1] 9

 

Moleküler Biyolog ve Genetikçi.İstanbul Teknik Üniversitesi'nde doktora öğrencisi. 5 yıldır biyoinformatik ve yeni nesil dizileme üzerine çalışıyor. Genetik ve biyoinformatik üzerine Variant adlı blogda yazıyor.

Yorum bırakın:

Your email address will not be published.

Site Footer

Sliding Sidebar

Hakkımda

Hakkımda

Moleküler Biyolog ve Genetikçi. İstanbul Teknik Üniversitesi'nde doktora öğrencisi. 5 yıldır biyoinformatik ve yeni nesil dizileme üzerine çalışıyor.

Tweets

Please check your internet connection.