1 apply ailesi

Bu hafta R programlama dersinde, döngü mantığını daha etkili ve okunabilir hale getiren apply ailesi fonksiyonlarını (lapply, sapply, apply, tapply, mapply, by) ayrıntılı bir şekilde öğrendim. Özellikle for ve while döngülerine alternatif olarak kullanılan bu fonksiyonların, hem kodu kısalttığını hem de daha sistematik bir yapı sunduğunu fark ettim.

1.1 Rastgele sayı üretimi ve fonksiyon kullanımı

Dersin başında runif() ve rnorm() fonksiyonlarını kullanarak farklı dağılımlardan rastgele veri üretmeyi tekrar ettik. Histogram yardımıyla üretilen verilerin dağılımlarını görselleştirdik. set.seed() fonksiyonunun, sonuçların tekrar üretilebilir olması açısından ne kadar önemli olduğunu uygulamalı olarak gördüm. Ayrıca, fonksiyonların yardım dosyalarına ?runif gibi komutlarla ulaşarak, fonksiyonların argümanlarını ve kullanım amaçlarını daha iyi kavradım.

1.2 lappy fonksiyonu

Bu haftanın en önemli kazanımlarından biri lapply() fonksiyonunu öğrenmek oldu. lapply()’nin bir liste üzerinde döngü kurarak her bir elemana aynı fonksiyonu uyguladığını ve her zaman liste döndürdüğünü öğrendim. Anonim (adsız) fonksiyonların kullanımını özellikle faydalı buldum. function(x){ … } yapısı sayesinde, tek seferlik işlemler için ayrı bir fonksiyon tanımlamaya gerek kalmadan pratik çözümler üretilebildiğini gördüm. Matrislerden belirli sütunların seçilmesi ve çarpım işlemleri bu duruma iyi bir örnek oldu.

1.3 sapply ile sonuçların basitleştirilmesi

sapply() fonksiyonunun, lapply() ile aynı mantıkta çalıştığını ancak sonuçları mümkün olduğunca vektör veya matris haline getirdiğini öğrendim. Tek değer döndüren fonksiyonlar için sapply() kullanımının daha okunabilir çıktılar sağladığını fark ettim. Ancak, her zaman basitleştirme yapamadığı durumlarda yine liste döndürebileceğini de öğrenmiş oldum.

1.4 split() ile veri gruplama

split() fonksiyonunun, veri setlerini belirli bir faktör değişkenine göre alt gruplara ayırmak için kullanıldığını öğrendim. Özellikle split() ve lapply() kombinasyonunun R’de çok yaygın kullanılan bir yaklaşım olduğunu görmek önemliydi. Iris veri seti üzerinde yaptığımız uygulamalar sayesinde, gruplara göre ortalama, standart sapma ve özet istatistik hesaplamayı daha iyi anladım.

1.5 tapply() ve by() Fonksiyonları

tapply() fonksiyonunun, bir vektörü grup değişkenine göre özetlemek için kullanıldığını öğrendim. Tek değer döndüren fonksiyonlarda vektör, birden fazla değer döndüren fonksiyonlarda ise liste çıktısı verdiğini fark ettim. by() fonksiyonunun ise veri setlerini gruplara ayırıp her grup için ayrı ayrı işlem yaptığını ve çıktıyı daha açıklayıcı bir formatta sunduğunu gözlemledim. Özellikle cinsiyete göre boy ortalamalarının hesaplanması örneği, bu fonksiyonların günlük veri analizinde ne kadar kullanışlı olduğunu gösterdi.

##apply() Fonksiyonu ve Matris İşlemleri

apply() fonksiyonunun, matrislerin satır veya sütunlarına fonksiyon uygulamak için kullanıldığını öğrendim. Bu sayede sütun ortalamaları, satır toplamları ve özet istatistikleri tek satır kodla hesaplayabildik. Ayrıca rowMeans(), colMeans() gibi özel fonksiyonların, apply()’nin optimize edilmiş halleri olduğunu öğrenmek benim için faydalı oldu.

1.6 Kişisel Fonksiyon Yazımı

Bağıl değişkenlik katsayısını hesaplayan bagildeg() fonksiyonunu yazarak, kendi tanımladığım fonksiyonları apply ailesi ile nasıl kullanabileceğimi öğrendim. Hem isimli hem de anonim fonksiyonlarla aynı sonuca ulaşılabildiğini görmek, fonksiyonel programlama mantığını daha iyi kavramamı sağladı.

1.7 mapply() ve Vektörleştirme

Bu haftanın en zor ama en öğretici konusu mapply() oldu. Birden fazla argüman üzerinde paralel işlem yapabilmenin, döngülere güçlü bir alternatif sunduğunu fark ettim. Ayrıca, R’ın geri dönüşüm (recycling) kuralı nedeniyle beklenmeyen sonuçlar oluşabileceğini ve bunun mapply() veya Vectorize() kullanılarak nasıl çözülebileceğini öğrendim. sumsq() fonksiyonu üzerinden yapılan örnek, vektörleştirmenin önemini çok net gösterdi.

2 Genel Değerlendirme

Bu hafta, R’da döngü yazmadan etkili programlama yapmayı öğrendim. Apply ailesi fonksiyonlarının hem kodu sadeleştirdiğini hem de hata yapma riskini azalttığını düşünüyorum. Özellikle veri analizi ve istatistiksel hesaplamalarda bu fonksiyonları doğru seçmenin çok önemli olduğunu fark ettim. Ayrıca airquality veri seti üzerinde derste yaptıklarımızı tekrar ettim.