if (koşul) {
# Koşul doğruysa yapılacak işlemler
else {
} # Koşul yanlışsa yapılacak işlemler
}
4 Kontrol İfadeleri
Kontrol ifadeleri ve döngüler R içerisinde sıklıkla kullanılan yapılardır. Belirli şartlara bağlı olan ya da tekrarlı işlemler için oldukça faydalıdırlar. R programlama dilinde en çok kullanılan if-else, for, while, next, break gibi kontrol döngüleridir.
4.1 if-else
if-else
ifadesi, programların belirli koşullar altında farklı işlemler yapmasını sağlar. Eğer bir koşul doğruysa belirli bir blok çalıştırılır, aksi takdirde başka bir blok çalıştırılır. Bu kombinasyon R’de en sık kullanılan kontrol yapılarındandır. Bu yapıda, bir koşulu test edebilir ve doğru veya yanlış olmasına bağlı olarak ona göre hareket edebilirsiniz. if-else kombinasyonlarında aşağıdaki yapılar kullanılmaktadır:
if (koşul1) {
# Koşul 1 doğruysa yapılacak işlemler
else if (koşul2) {
} # Koşul 2 doğruysa yapılacak işlemler
else {
} # Hiçbir koşul doğru değilse yapılacak işlemler
}
Örnek olarak, bir kullanıcının yaşına bağlı olarak belli bir mesaj gösterelim.
<- 18
yas
if (yas >= 18) {
print("Oy kullanabilirsiniz!")
else {
} print("Üzgünüz, oy kullanmak için henüz yaşınız tutmuyor.")
}
[1] "Oy kullanabilirsiniz!"
Burada, if
ifadesi yas >= 18
koşulunu kontrol eder. Eğer bu koşul doğruysa, “Oy kullanabilirsiniz!” mesajı ekrana yazdırılır; aksi halde, “Üzgünüz, oy kullanmak için henüz yaşınız tutmuyor.” mesajı yazdırılır.
Birden fazla koşulu kontrol etmek için else if
ifadesini kullanabiliriz. Örneğin, bir öğrencinin not durumunu kontrol edelim.
<- 75
not
if (not >= 90) {
print("Notunuz AA")
else if (not >= 80) {
} print("Notunuz BA")
else if (not >= 70) {
} print("Notunuz BB")
else if (not >= 60) {
} print("Notunuz CB")
else {
} print("Dersten başarısız oldunuz.")
}
[1] "Notunuz BB"
Bu örnekte, else if
ifadeleri sırayla öğrencinin notunu kontrol eder ve koşullara uygun olarak farklı mesajları yazdırır. Eğer hiçbir koşul sağlanmazsa, “Dersten başarısız oldunuz.” mesajı yazdırılır.
Ayrıca ifelse()
fonksiyonu R programlama dilinde bulunan başka bir fonksiyondur ve if-else
ifadesine benzer bir işlevi vardır. Bu fonksiyon, vektörler üzerinde koşullu işlemler yapmak için kullanılır.
ifelse()
fonksiyonu şu şekilde kullanılır.
ifelse(test, yes, no)
test
: Koşul veya koşulları içeren ifade veya vektör.yes
: Koşul doğruysa uygulanacak değer veya işlem.no
: Koşul yanlışsa uygulanacak değer veya işlem.
Örnek olarak, bir vektördeki değerlerin pozitif veya negatif olmasını kontrol edelim:
<- c(-2, 3, -5, 8, -1)
vec <- ifelse(vec >= 0, "Pozitif", "Negatif")
sonuc print(sonuc)
[1] "Negatif" "Pozitif" "Negatif" "Pozitif" "Negatif"
Bu örnekte, ifelse()
fonksiyonu vec
vektöründeki her bir değeri kontrol eder. Eğer değer 0’dan büyük veya eşitse, o değerin karşılığı “Pozitif” olur; aksi takdirde “Negatif” olur.
Aşağıdaki örnekte ise ifelse()
fonksiyonun birden fazla şekilde bir dataframe içerisinde nasıl kullanıldığını gösterelim.
<- data.frame(value = 1:9)
df $group <- ifelse(df$value <= 3,1,ifelse(df$value > 3 & df$value < 6,2,3))
df df
value group
1 1 1
2 2 1
3 3 1
4 4 2
5 5 2
6 6 3
7 7 3
8 8 3
9 9 3
Bu örnekte, yeni oluşturulacak group
değişkeni için değerler atanacaktır. Buna göre,
Eğer
value
kolonu 3 ve altında değere sahipsegroup
değişkenine 1,value
kolonu 3’den büyük ve 6’dan küçük isegroup
değişkenine 2,Diğer durumlarda ise
group
değişkenine 3 değeri atanacaktır.
4.2 Döngüler
4.2.1 for
for
döngüsü R programlama dilinde tekrarlı işlemler yapmak için kullanılır. Bu döngü, bir dizi veya vektör üzerinde iterasyon yaparak her bir elemana erişmenizi sağlar. Genellikle listedeki her elemanı veya belirli bir aralıktaki sayıları işlemek için kullanılır. for
döngüsü şu yapıya sahiptir:
for (degisken in dizi veya dizin) {
# Her iterasyonda yapılacak işlemler
}
degisken
: Her iterasyonda dizin veya dizi elemanlarını temsil eden değişken.dizi veya dizin
: Döngünün üzerinde dolaşacağı vektör, liste veya sayı dizisi.
Örnek olarak, 1’den 5’e kadar olan sayıları ekrana yazdıran bir for
döngüsü kullanalım:
<- c("İstanbul", "Ankara", "İzmir", "Bursa")
sehirler
for (sehir in sehirler) {
print(paste("Şehir:", sehir))
}
[1] "Şehir: İstanbul"
[1] "Şehir: Ankara"
[1] "Şehir: İzmir"
[1] "Şehir: Bursa"
Bu örnekte, sehirler
listesindeki her bir elemanı sehir
değişkenine atar ve bu elemanları döngü içinde kullanarak her bir şehri ekrana yazdırır.
for (i in 1:5) {
print(paste("Karesi:", i^2))
}
[1] "Karesi: 1"
[1] "Karesi: 4"
[1] "Karesi: 9"
[1] "Karesi: 16"
[1] "Karesi: 25"
Bu örnek, 1’den 5’e kadar olan sayıları i
değişkenine atar ve her bir sayının karesini ekrana yazdırır.
for (i in 1:5) {
for (j in 1:5) {
cat(i, "*", j, "=", i*j, "\t")
}cat("\n")
}
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
Bu örnekte, iç içe for
döngüleri kullanılarak 1’den 5’e kadar olan sayıların çarpım tablosu oluşturuluyor. cat
fonksiyonu kullanılarak değerler ekrana yazdırılıyor ve \t
ifadesi her bir değer arasında bir sekme boşluğu eklenmesini sağlıyor. Bu sayede çarpım tablosu satır içinde düzenli bir şekilde görüntülenmiş oluyor. \t
kullanımı, metin tabanlı çıktıları düzenlemek ve okunabilirliği artırmak için yaygın olarak kullanılan bir yöntemdir.
<- 10
n <- numeric(n)
fib 1] <- 0
fib[2] <- 1
fib[
for (i in 3:n) {
<- fib[i-1] + fib[i-2]
fib[i]
}print(fib)
[1] 0 1 1 2 3 5 8 13 21 34
Bu örnekte, for
döngüsü kullanılarak Fibonacci serisi hesaplanıyor ve n
değerine göre seriyi ekrana yazdırıyor. Fibonacci serisi, her sayının kendisinden önceki iki sayının toplamıyla elde edildiği bir sayı dizisidir. Seri, herhangi bir rakam ile başlayabilir. Genellikle 0 ile başlar ve ilk iki terim 0 ve 1’dir.
Seri şu şekilde ilerler:
0, 1, 1, 2, 3, 5, 8, 13, 21, …
Her sayı, kendisinden önce gelen iki sayının toplamıdır. Örneğin, 2 sayısı 1 ve 1’in toplamıdır, 3 sayısı ise 1 ve 2’nin toplamıdır ve bu şekilde devam eder.
Fibonacci Dizisinde yer alan sayıların diğer bir özelliği kendilerinden bir öncekiyle oranlandığında oluşan serinin altın orana yaklaşarak ilerlemesidir. Fibonacci serisi, doğada birçok yerde gözlemlenen yapılarla ilişkilendirilir. Bitki yapısı, deniz kabukları, sanat eserleri ve matematiksel modellemelerde sıkça karşımıza çıkar. Ayrıca, algoritmaların ve programların verimliliğini test etmek için kullanılabilir.
for döngüsünde i, j gibi harfler yerine başka ifadeler de kullanılabilir. Aşağıdaki örnekte oluşturulan 3 değişkenli bir veri setindeki ortalama değerler var
değişkeni kulanılarak döngü yardımıyla ekrana yazdırılmıştır.
<- data.frame(yas = c(28, 35, 13, 13),
(x boy = c(1.62, 1.53, 1.83, 1.71),
kilo = c(65, 59, 72, 83)))
yas boy kilo
1 28 1.62 65
2 35 1.53 59
3 13 1.83 72
4 13 1.71 83
for (var in colnames(x)) {
<- mean(x[, var])
m print(paste0("Ortalama ", var," ", m, "'tir"))
}
[1] "Ortalama yas 22.25'tir"
[1] "Ortalama boy 1.6725'tir"
[1] "Ortalama kilo 69.75'tir"
Kullanım Alanları
Veri İşleme: Veri setlerindeki her bir öğeyi işlemek için
for
döngüsü kullanılabilir. Örneğin, liste, vektör veya matrislerdeki her bir öğeyi ele almak için kullanılabilir.Tekrarlı İşlemler: Belirli bir işlemi veya kod bloğunu belirli bir sayıda veya belirli bir koşula kadar tekrar etmek için
for
döngüsü kullanılabilir.İterasyonlar ve Simülasyonlar: İterasyonlar, özellikle simülasyonlarda, çeşitli durumları veya senaryoları değerlendirmek için sıklıkla kullanılır. Her bir iterasyon, farklı bir durumu temsil edebilir.
for
döngüsü, belirli bir veri yapısındaki elemanları işlemek veya belirli bir işlemi tekrarlamak için oldukça kullanışlıdır. Ancak büyük veri setleri veya karmaşık işlemler için vektör işlemleri veya fonksiyonel programlama teknikleri genellikle tercih edilir, çünkü bu teknikler genellikle daha hızlı çalışabilir.
4.2.2 while
while
döngüsü, belirli bir koşul doğru olduğu sürece belirli bir işlemi tekrar etmek için kullanılır. Genellikle döngünün kaç kere çalışacağı önceden belirlenmiş değilse veya bir koşul karşılanana kadar çalışmaya devam etmesi gerektiğinde tercih edilir. while
döngüsü şu şekilde çalışır:
while (koşul) {
# Koşul doğru olduğu sürece yapılacak işlemler
}
koşul
: Bir mantıksal ifade veya değer. Bu koşul doğru olduğu sürece döngü çalışmaya devam eder.
<- 0
toplam <- 1
i
while (i <= 10) {
<- toplam + i
toplam <- i + 1
i
}
print(toplam)
[1] 55
Bu örnekte, while
döngüsü kullanılarak 1’den 10’a kadar olan sayıların toplamı hesaplanıyor.
Kullanım Alanları
Kullanıcı Girişi: Kullanıcıdan bir değer alınana veya belirli bir koşul karşılanana kadar kullanıcıdan giriş almak için kullanılabilir.
Dosya Okuma ve Yazma İşlemleri: Dosya içeriği işlenirken belirli bir koşula kadar dosya okuma veya yazma işlemleri için kullanılabilir.
Doğrusal Arama: Bir koşul karşılanana kadar bir listede veya veri yapısında doğrusal arama yapmak için kullanılabilir.
while
döngüsü, belirli bir koşul doğru olduğu sürece çalışır ve bu koşulun sonlanması veya değişmesiyle birlikte döngü sona erer. Ancak dikkatli kullanılmadığında sonsuz döngülere neden olabilir, bu yüzden döngüdeki koşulun belirli bir zamanda sonlanmasını sağlamak önemlidir.
4.2.3 repeat
repeat
döngüsü, belirli bir koşul sağlanana kadar tekrarlı işlemler yapmak için kullanılır. while
döngüsünden farklı olarak, repeat
döngüsü bir koşulun doğru veya yanlış olmasına bakmadan işlem yapmaya devam eder. Döngü, içerideki kod çalıştırıldıktan sonra, elle kesilmediği sürece sonsuza kadar devam eder.
repeat
döngüsünün yapısı şu şekildedir:
repeat {
# Koşul kontrolü yapılmaksızın sürekli çalışacak işlemler
# Eğer bir şart sağlanırsa döngüyü kırarak çıkılır (break)
}
Genellikle repeat
döngüsü, koşulun döngü içinde daha sonra kontrol edilmesi gereken durumlarda veya kullanıcıdan belirli bir işaret alınana kadar çalışması gereken durumlarda kullanılır.
repeat {
<- runif(1) # 0 ile 1 arasında rastgele bir sayı üretir
rastgele_sayi print(rastgele_sayi)
if (rastgele_sayi > 0.9) {
break
} }
[1] 0.543787
[1] 0.324433
[1] 0.5637773
[1] 0.7491012
[1] 0.1625035
[1] 0.5460025
[1] 0.6146379
[1] 0.8452702
[1] 0.1217738
[1] 0.6022902
[1] 0.4623328
[1] 0.01746738
[1] 0.9977307
Bu örnekte, repeat
döngüsü 0 ile 1 arasında rastgele sayılar üretir ve bu sayılar 0.9’dan büyük olduğunda döngüyü sonlandırır.
<- 0
x
repeat {
if (x^2 > 20) break # bu koşul sağlandığında döngüyü bitir
print(x)
<- x + 1 # x'i bir artır
x }
[1] 0
[1] 1
[1] 2
[1] 3
[1] 4
Bu örnekte ise, repeat
döngüsü 0 ile başlayan bir x sayısının karesinin 20’den büyük olması durumuna kadar x sayısını print eder. Eğer x’in karesi 20’den büyük ise döngüyü sonlandırır.
Kullanım Alanları
Belirli Bir Durum Gerçekleşene Kadar İşlem Yapma: Kullanıcıdan belirli bir girdi alınana veya belirli bir durum gerçekleşene kadar işlem yapmak için kullanılabilir.
Kontrolsüz İşlemler: Belirli bir durum gerçekleşene kadar döngünün devam etmesi gerektiği durumlarda kullanılabilir. Örneğin, rastgele sayılar üretilmesi gibi.
repeat
döngüsü, belirli bir koşul doğru veya yanlış olmasına bakmadan işlem yapmaya devam eder. Ancak, döngü sonsuz olabilir, bu nedenle döngüyü belirli bir şart sağlandığında kırmak (break
ifadesiyle) önemlidir.
4.2.4 next
next
ifadesi, döngülerde bir iterasyonu atlamak ve döngüyü devam ettirmek için kullanılır. Genellikle belirli bir koşul karşılandığında o iterasyonun işlenmesini atlamak için kullanılır.
next
ifadesinin kullanımı döngü içinde şu şekildedir:
for (i in 1:10) {
if (i %% 2 == 0) {
next # Çift sayıları atla
}print(i)
}
[1] 1
[1] 3
[1] 5
[1] 7
[1] 9
Bu örnekte, %%
operatörü bir sayının diğerine bölümünden kalanı verir. Eğer bir sayı 2’ye bölündüğünde kalan 0 ise, o sayı çifttir. Yukarıdaki döngü, i
çift sayı olduğunda next
ifadesiyle o iterasyonu atlar ve döngüyü devam ettirir.
Kullanım Alanları
Belirli Koşullarda İşlemleri Atlamak: Döngü içinde belirli bir koşul sağlandığında o iterasyonu atlamak için kullanılabilir.
Veri Filtreleme: Veri içinde belirli koşullara uymayan öğeleri atlamak için kullanılabilir. Örneğin, bir liste içinde belirli tipte öğeleri filtrelemek için.
Döngü Performansını İyileştirme: Bazı durumlarda belirli koşulların sağlanması durumunda işlemleri atlayarak döngü performansını artırabilir.
next
ifadesi, döngüler içinde belirli koşullarda iterasyonları atlamak ve döngüyü devam ettirmek için kullanılır. Bu sayede istenmeyen durumları veya öğeleri döngü içinde işlem yapmadan geçebilirsiniz.