R Üzerinde Kontrol Yapıları

Yaşam Bilimlerinde Veri Analizi

Emrah Kırdök, Ph.D.

2023-09-03

Kontrol Yapıları

Neden?

  • Veri analizi adımları karmaşık olabilir.
  • Çok uzun bir vektördeki bütün elemanlara bir fonkisyon uygulamak isteyebilirsiniz.
  • Farklı özelliklere sahip elemanlara, farklı fonkisyonlar uygulamak isteyebilirsiniz.

Bir örnek

yaprak_uzunlugu <- c(2.3, 3.4, 4.5, 1.2, 3.4, 
                    3, 1.8, 6.3, 2.1, 5)
  • Döngü yapısı for
    • Aynı işlemi farklı elemanlara uygulama
  • Kontrol yapısı if-else
    • Belirlenen özelliklere göre farklı uygulama
    • 5’e eşit veya 5’den büyük olanlara farklı bir işlem
    • 5’den küçük olanlara farklı bir işlem

for döngüsü

yaprak_uzunlugu <- c(2.3, 3.4, 4.5, 1.2, 3.4, 
                    3, 1.8, 6.3, 2.1, 5)

İşlem: + Her elemanına 5 ekleyerek çıkan sonucu ikiye bölmek istediğimizi düşünelim.

Önce ilk eleman için yapalım:

(yaprak_uzunlugu[1]+5)/2
[1] 3.65

for döngüsü

Şimdi ise ikinci eleman için bunu yapalım:

(yaprak_uzunlugu[2]+5)/2
[1] 4.2

Dikkat ederseniz sadece kullandığımız vektördeki indis değişiyor. Dolayısıyla for döngüsü kullanırsak bu işi daha kolay bir şekilde halledebiliriz.

for döngüsü

Öncelikle for döngüsünün genel yapısına bakalım:

for ( ÇALIŞILACAK ELEMAN KÜMESİ ){
    YAPILACAK İŞ
}

for döngüsü

Yazalım:

for (i in 1:length(yaprak_uzunlugu)){
    sonuc <- (yaprak_uzunlugu[i]+5)/2
    print(sonuc)
}
[1] 3.65
[1] 4.2
[1] 4.75
[1] 3.1
[1] 4.2
[1] 4
[1] 3.4
[1] 5.65
[1] 3.55
[1] 5

for döngüsü

  • Önce bir sayı vektörü oluşturuyoruz.
  • Ancak bu sayı vektörünü, kullanacağımız vektörün uzunluğuna göre belirliyoruz.
  • Yani elimizde 1’den 10’a kadar bir sayı dizisi oluştuyor.

for döngüsü

1:length(yaprak_uzunlugu)
 [1]  1  2  3  4  5  6  7  8  9 10
  • i in 1:length(yaprak_uzunlugu) cümlesini kullandığımızda, R bize elimizdeki eleman kümesini tek tek seçme şansı veriyor.

for döngüsü

  • i adından bir değişken oluşturuluyor.
  • Önce i değişkenine birinci eleman olan 1 değerini atıyor ve belirtilen işlemi yapıyor.
  • O işlem bitince, i değerine ikinci elemanı atanıyor ve bu sefer i <- 2 için işlemi gerçekleştiriyor.
  • Bu işlem, oluşturduğumuz sayı vektörü bitene kadar devam ediyor.

for döngüsü

  • İstersek doğrudan vektördeki elemanları da kullanabiliriz.
  • Bunun için ise i yerine eleman isimli bir değişken oluşturalım:
for (eleman in yaprak_uzunlugu){
    sonuc <- (eleman+5)/2
    print(sonuc)
}
[1] 3.65
[1] 4.2
[1] 4.75
[1] 3.1
[1] 4.2
[1] 4
[1] 3.4
[1] 5.65
[1] 3.55
[1] 5

for döngüsü

for ilk Birinci elemanı seç islem İstenen işlemi gerçekleştir ilk->islem son Son eleman mı? devam Sonraki elemana geç son->devam FALSE sonlandır Döngüyü sonlandır son->sonlandır TRUE devam->islem islem->son
Figure 1: for döngüsü hakkındaki diyagram

if-else Kontrol yapısı

  • Veriye bağlı olarak koşullu bir analiz gerçekleştirilecekse kullanabiliriz.
  • Elimizde bir sayımız olsun.
  • Eğer bu sayı 5’ten büyük veya eşit ise ekrana “Bu sayı 5’ ten büyük veya eşittir.” yazsın.
  • Eğer 5’den küçük ise, “Bu sayı 5’den küçüktür” yazsın.

if-else Kontrol yapısı

g sayi Sayı kontrol 5'den büyük veya 5'e eşit sayi->kontrol ilk Ekrana yazdır: 5'den büyük veya 5'e eşit kontrol->ilk TRUE ikinci Ekrana yazdır: 5'den küçük kontrol->ikinci FALSE sonlandir İşlemi sonlandır ilk->sonlandir ikinci->sonlandir
Figure 2: if-else döngüsü hakkındaki diyagram

if-else Kontrol yapısı

İlk olarak bir sayı belirleyelim:

sayi <- 12

İlk koşulu çalıştıralım:

sayi >= 5
[1] TRUE
  • Bu işlemin sonucunda TRUE değeri geri döndürüldü.
  • Burada bir karşılaştırma işlemi yaptık. Yani elimizdeki sayı 5’e eşit veya 5’den büyük.
  • Ama asla 5’den küçük değil.

if-else Kontrol yapısı

if ( KOŞUL ){
    KOŞUL DOĞRU İSE BURAYI ÇALIŞTIR
} else {
    KOŞUL DOĞRU DEĞİL İSE BURAYI ÇALIŞTIR
}

if-else Kontrol yapısı

sayi <- 12

if (sayi >= 5) {
  print("bu sayi bese esit veya besten buyuktur")
} else{
  print("bu sayi besten kucuktur")
}
[1] "bu sayi bese esit veya besten buyuktur"

Farklı yapıları birleştirelim

  • Şimdi tekrar yaprak uzunluğu örneğimize gelelim ve bu iki yapıyı birleştirelim.
  • Bu sefer her elemana farklı işlemler uygulamaya çalışalım.
yaprak_uzunlugu <- c(2.3, 3.4, 4.5, 1.2, 3.4, 
                    3, 1.8, 6.3, 2.1, 5)

Farklı yapıları birleştirelim

Elimizde artık iki tane koşul olsun:

  • Eğer eleman 5’den büyük veya eşitse, elemana 5 ekle ve ikiye böl.
  • Eğer eleman 5’den küçükse, elemana 10 ekle ve 3’e böl.

Farklı yapıları birleştirelim

for (eleman in yaprak_uzunlugu){
    if (eleman >= 5){
        sonuc <- (eleman+5)/2
        cat("yaprak uzunlugu 5'den buyuk veya esit, ilk formul uygulandı:", sonuc, "\n")
    } else {
        sonuc <- (eleman+10)/3
        cat("yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı:", sonuc, "\n")
    }
}
yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı: 4.1 
yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı: 4.466667 
yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı: 4.833333 
yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı: 3.733333 
yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı: 4.466667 
yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı: 4.333333 
yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı: 3.933333 
yaprak uzunlugu 5'den buyuk veya esit, ilk formul uygulandı: 5.65 
yaprak uzunlugu 5'den kucuk, ikinci formul uygulandı: 4.033333 
yaprak uzunlugu 5'den buyuk veya esit, ilk formul uygulandı: 5 

Farklı yapıları birleştirelim

g eleman Birinci elemanı seç kontrol 5'den büyük veya 5'e eşit mi? eleman->kontrol ilk Birinci formülü uygula Sonucu ekrana yazdır kontrol->ilk TRUE ikinci İkinci formülü uygula Sonucu ekrana yazdır kontrol->ikinci FALSE son Son eleman mı? devam Sonraki elemanı seç son->devam FALSE Döngüyü sonlandır. Döngüyü sonlandır. son->Döngüyü sonlandır. TRUE ilk->son ikinci->son devam->kontrol Başla Başla Başla->eleman
Figure 3: İki kontrol yapısını da birleştirmek