Bölüm10 Kontrol Yapıları

10.1 if-else

if acıkırsan, yemek ye.

if alarm çalarsa, uyan.

x=11
if(x>10){
  print("x, 10 dan buyuktur")
}
## [1] "x, 10 dan buyuktur"


puan=49
if(puan<50){print("daha fazla calis!")}
## [1] "daha fazla calis!"


z=10
if(z==10){t<-z+3
print(t)}
## [1] 13



if trafik lambası yeşil yanarsa harekete geç else dur.

if kahve bardağın dolu ise iç else bardağı doldur.


x<-15
if(x<10){print("x 10 dan kucuktur")
}else {print("x 10 a esit veya buyuktur")}
## [1] "x 10 a esit veya buyuktur"


puan=90
  if(puan<70){print("daha fazla calis")
    }else{print("iyi gidiyorsun")}
## [1] "iyi gidiyorsun"



if hava cok sıcak ise; tshirt giy else if sıcak ve yagmurlu ise; tshirt ve ceket giy, else if soguk ise; kazak giy else evde kal.

puan=82
  if(puan<50){print("daha fazla calis!")
  } else if(puan>=50 & puan<80){print("iyi gidiyorsun")
      }else{print("tebrikler!")}
## [1] "tebrikler!"



Alternatif olarak ifelse() fonksiyonundan da faydalanılabilir.


puan=90
ifelse(puan<70, "daha fazla calis","iyi gidiyorsun")
## [1] "iyi gidiyorsun"


h=8
ifelse(h!=3,sqrt(h),h^2)
## [1] 2.828427

10.2 loops

Döngü (loop) başlığı altında veri analizinde sıklıkla ihtiyaç duyacağınız for, while, repeat gibi yapılar incelenecek ve önemli noktalar vurgulanacaktır.

10.2.1 for

for(i in 1:5) {
print(i)}
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5


x <- c("a", "b", "c", "d") 

for(i in 1:4) {
print(x[i])}
## [1] "a"
## [1] "b"
## [1] "c"
## [1] "d"


for(i in seq_along(x)) {
print(x[i])}
## [1] "a"
## [1] "b"
## [1] "c"
## [1] "d"


for döngüsü iç içe (nested) yapıda da olabilir. Bu yapı genellikle çok boyutlu ve hiyerarşik (matris, list gibi) veri yapıları için kullanılır. 2-3 seviyeden fazla iç içe döngü kullanmak hem kodun yazımında hem de anlaşılmasında zorluk yaratmaktadır. Bu bakımdan fazla sayıda nested loop yazmak yerine fonksiyonlardan faydalanmak daha akılcı olacaktır.


x <- matrix(1:6, 2, 3)
for(i in seq_len(nrow(x))) {
for(j in seq_len(ncol(x))) {
                print(x[i, j])
} }
## [1] 1
## [1] 3
## [1] 5
## [1] 2
## [1] 4
## [1] 6

10.2.2 while

while döngüleri bir koşulu test ederek başlar. Doğruysa, döngü çalışmaya başlar. Döngü yürütüldüğünde, koşul tekrar test edilir ve koşul yanlış olana kadar bu işlem devam eder, ardından döngü sonlanır. while döngüleri dikkatli yazılmazsa sonsuz bir döngüye dönüşebilir.


count <- 0
while(count < 6) {
         print(count)
 count <- count + 1}
## [1] 0
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5


10.2.3 repeat

repeat, başından itibaren sonsuz bir döngü başlatır. Veri analizi uygulamalarında sıklıkla kullanılmasa da ihtiyaç duyulduğu durumlar mevcuttur. Bir repeat döngüsünden çıkmanın tek yolu, break çağrısı yapmaktır.

İlgilenilen problemde çözüme yeterince yaklaşana kadar durmak istemeyeceğiniz yinelemeli bir algoritma mevcut olabilir. Bu tür bir durumda, çözüme “yeterince yaklaşmak” için kaç tane yineleme gerekeceğini genellikle önceden bilemezsiniz, repeat’in uygun kullanımı böyle bir problemde mümkün olabilir.

10.2.4 next, break

next, bir döngünün yinelemesini atlamak için kullanılır.


i2<-c()
for(i in 1:10) { if(i <= 5) {
                ## ilk 5 iterasyonu atla
next}
       i2[i]<-i*3 
}
  print(i2)
##  [1] NA NA NA NA NA 18 21 24 27 30


break, bir döngünün sonlandırılması için kullanılır.

for(i in 1:10) { 
  print(i)
if(i > 5) {
  break
} }
## [1] 1
## [1] 2
## [1] 3
## [1] 4
## [1] 5
## [1] 6