Ana içeriğe geç

R'de Koşullar ve Akış Kontrolü Eğitimi

R nesnelerini karşılaştırmaya yönelik ilişkisel operatörleri ve TRUE ile FALSE boolean değerlerini birleştirmeye yönelik mantıksal operatörleri öğrenin. Ayrıca koşullu ifadeler oluşturacaksınız.
· 13 dk. oku

Yapay Zeka ile Keşfedin

Akış kontrolü ifadelerinin akış şeması
Akış Kontrolü (Kaynak: w3schools)

İlişkisel Operatörler

İlişkisel operatörler, diğer adıyla karşılaştırıcılar, bir R-Nesnesinin başka bir R-nesnesiyle nasıl ilişkilendiğini görmenize yardımcı olur. Örneğin, iki nesnenin eşit olup olmadığını == (çift eşittir) işaretiyle kontrol edebilirsiniz. Her iki tarafı da TRUE olan bir mantıksal ifade, TRUE eşittir TRUE olduğundan TRUE döndürür; aşağıda gösterildiği gibi.

TRUE == TRUE
TRUE

Ancak, bir tarafta TRUE diğer tarafta FALSE varsa, çıktı olarak FALSE mantıksal değerini alırsınız.

TRUE == FALSE
FALSE

Mantıksal değişkenlerin yanı sıra, diğer türlerin eşitliğini de kontrol edebilirsiniz.

Hadi, dizgileri ve sayıları karşılaştıralım.

100 == 100
TRUE
100 == 200
FALSE
'tutorial' == 'R'
FALSE
  • Eşitlik operatörünün tersi eşitsizlik operatörüdür ve !- işaretiyle (ünlem ve eşittirin birleşimi) gösterilir.

Şimdi, daha önce FALSE olan tüm koşullar TRUE olacaktır, bir bakalım!

100 != 200
TRUE
'tutorial' != 'R'
TRUE
TRUE != FALSE
TRUE

Benzer şekilde, eşitsizlik operatörü sayısal ve matrisler, vektörler, listeler gibi diğer R-Nesneleri için de kullanılabilir.

  • Diyelim ki, verilen iki R-Nesnesinden hangisinin diğerinden büyük ya da küçük olduğunu kontrol etmek istiyorsunuz. Elbette, basit < ve > (küçüktür ve büyüktür) işaretlerini kullanabilirsiniz.

    Önce sayısal bir örneğe bakalım.

2 > 10
FALSE
-200 < 0
TRUE

Gördüğünüz gibi, $2$’nin $10$’dan büyük olmaması ya da $-200$’ün $0$’dan küçük olması kendini açıklar. Peki ya dizgiler veya karakterler? Bunun nasıl yapılabileceğine bakalım.

R’nin, hangi dizgi ya da karakterin diğerinden büyük olduğuna karar verirken alfabetik sıraya öncelik verdiği görülüyor.

Aşağıdaki örnekte, alfabetik sıraya göre t, R’den sonra geldiği için; t, R’den büyüktür.

'tutorial' > 'RRRRRRRRR'
TRUE

Önemli bir not: R’de ve neredeyse tüm programlama dillerinde TRUE sayısal olarak 1, FALSE ise 0 olarak yorumlanır. Bu nedenle bu benzetimde TRUE, FALSE’tan büyüktür.

TRUE > FALSE
TRUE
  • Ayrıca bir R-nesnesinin başka bir R-nesnesinden büyük ya da ona eşit (>=) (ya da küçük ya da eşit <=) olup olmadığını da kontrol edebilirsiniz. Bunu başarmak için küçük/büyük işaretini eşittir ile birlikte kullanırsınız. Yani iki koşuldan (küçük veya eşit / büyük veya eşit) herhangi biri TRUE ise, tüm koşul TRUE olacaktır.
5 >= 5 # 5, 5'ten büyük değildir ama eşittir; bu yüzden TRUE döner.
TRUE
5 >= 10
FALSE

R veri türleri hakkında bu DataCamp eğitiminden bilgi edinebilirsiniz. R’nin listeler, matrisler ve vektörleri gayet iyi yönettiğini gösterir.

Peki R karşılaştırıcıları R vektörlerini işleyebilir mi? Hadi bulalım.

Örneğin, son 10 günde hazırladığınız datacamp eğitiminizin aldığı görüntüleme sayılarını içeren bir satır vektörünüz var. Şimdi, hangi günlerde 100 ve üzeri görüntüleme aldığınızı bulmak istiyorsunuz. Hazırda bulunan büyüktür işaretini kullanabilirsiniz.

datacamp_views <- c(100,20,5,200,60,88,190,33,290,64)
length(datacamp_views)
10
datacamp_views >= 100
  1. TRUE
  2. FALSE
  3. FALSE
  4. TRUE
  5. FALSE
  6. FALSE
  7. TRUE
  8. FALSE
  9. TRUE
  10. FALSE

Yukarıdaki çıktıda görüldüğü gibi birinci, dördüncü, yedinci ve dokuzuncu için sonuçlar TRUE; yani bu günlerde görüntüleme sayısı 100 ve üzeriydi.

Benzer şekilde iki vektörü veya iki matrisi de karşılaştırabilirsiniz.

youtube_views <- c(10,20,1000,64,100,9,19,3,90,4)

Bu şekilde, datacamp eğitimi görüntülemelerinizin youtube video görüntülemelerinizi ne zaman geçtiğini veya tam tersini bulmak için güzel ve basit bir uygulama oluşturabilirsiniz.

R’de bu, iki vektörü eleman bazında karşılaştırarak çalışır. Örneğin, aşağıdaki çıktıdaki her iki vektörden ilk elemanı ele alırsanız, DataCamp görüntüleme vektöründe değer 100 iken diğer vektörde 10 olduğunu ve bu nedenle TRUE döndüğünü görebilirsiniz.

datacamp_views > youtube_views
  1. TRUE
  2. FALSE
  3. FALSE
  4. TRUE
  5. FALSE
  6. TRUE
  7. TRUE
  8. TRUE
  9. TRUE
  10. TRUE

Hızlıca iki sayıyı karşılaştıralım. İlkokul matematiğinden hatırlarsanız, BODMAS (veya PEMDAS) diye bir kural vardır; parantez, bölme, çarpma, toplama ve çıkarma sırasına göre herhangi bir matematiksel denklem çözülür. Aşağıdaki iki R ifadesini çözerken de aynı kuralı kullanacaksınız.

-6 * 5 + 2 >= -10 + 1 #solda BODMAS'a göre önce çarpma sonra toplama yapılır
FALSE

Matrisleri karşılaştırın

R’nin karşılaştırmalar için farklı veri yapılarıyla başa çıkma becerisi vektörlerle sınırlı değildir. Matrisler ve ilişkisel operatörler de sorunsuzca birlikte çalışır!

Vektörler yerine (önceki örnekte olduğu gibi), DataCamp ve YouTube verileri artık views adlı bir matriste saklanıyor. İlk satır DataCamp bilgilerini; ikinci satır YouTube bilgilerini içerir. Önceki örnekte oluşturduğunuz datacamp ve youtube vektörlerinden yararlanarak, R’nin yerleşik matrix fonksiyonunu kullanarak bir matris oluşturacaksınız.

datacamp_views <- c(100,20,5,200,60,88,190,33,290,64)
youtube_views <- c(10,20,1000,64,100,9,19,3,90,4)
views <- matrix(c(datacamp_views, youtube_views), nrow = 2, byrow = TRUE)
views
dbl türünde 2 × 10 boyutunda matris
10020520060881903329064
10201000641009193904

Hem datacamp hem de youtube görüntülemelerinin ne zaman 20’ye eşit olduğunu bulalım.

views == 20
lgl türünde 2 × 10 boyutunda matris
FALSETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE
FALSETRUEFALSEFALSEFALSEFALSEFALSEFALSEFALSEFALSE

Harika! İlişkisel operatörlerin nasıl çalıştığını anladığınıza göre şimdi mantıksal operatörlere geçelim.

Mantıksal Operatörler

R, ilişkisel operatörlerin sonuçlarını birleştirmenize yardımcı olmak için aşağıdaki mantıksal operatörleri sağlar:

  • AND ( & ) operatörü
  • OR ( | ) operatörü
  • NOT ( ! ) operatörü

Her birine bakalım.

  • AND operatörü: Diğer programlama dillerinde olduğu gibi, R’nin AND operatörü iki mantıksal değer alır ve yalnızca her ikisi de true ise TRUE döndürür; aksi halde false döndürür.
AND operatörü doğruluk tablosu
AND Operatörü Doğruluk Tablosu

Kendini açıklayan birkaç örneğe bakalım.
TRUE & TRUE # 1.1 = 1
TRUE
TRUE & FALSE # 1.0 = 0
FALSE
FALSE & FALSE # 0.0 = 0
FALSE
FALSE & TRUE # 0.1 = 0
FALSE

Benzer şekilde, yukarıdaki gibi doğrudan mantıksal değerler kullanmak yerine, karşılaştırıcıların sonuçlarını bu operatörlerle kullanabilirsiniz.

x <- 100
x < 200 & x >= 100  # x, 200'den küçük ve 100'e küçük eşittir, bu yüzden TRUE döner.
TRUE
x < 200 & x > 100 # ikinci karşılaştırma (x 100'den büyük) false olduğu için bu ifade FALSE'tur.
FALSE
  • OR Operatörü: OR operatörü AND operatörüne oldukça benzer. Ancak temel fark, burada kullandığı mantıksal değerlerden herhangi biri TRUE ise tüm OR ifadesinin TRUE olmasıdır.
OR operatörü doğruluk tablosu
OR Operatörü Doğruluk Tablosu

Kendini açıklayan birkaç örneğe bakalım.
TRUE | TRUE # 1 + 1 = 1
TRUE
TRUE | FALSE # 1 + 0 = 0
TRUE
FALSE | FALSE # 0 + 0 = 0
FALSE
FALSE | TRUE # 0 + 1 = 0
TRUE

Yukarıda kullandığımız sayısal örneğin aynısını kullanalım; ancak bu kez sonuç farklı olmalı.

x <- 100
x < 200 | x > 100 # ilk karşılaştırma (x 100'den küçük) True olduğu için bu ifade TRUE'dur.
TRUE
  • NOT Operatörü: Anlaması en basit operatördür; uygulandığı mantıksal değeri olumsuzlar, yani mantıksal operatörün tersini alır.
NOT operatörü doğruluk tablosu
NOT Operatörü Doğruluk Tablosu

Birkaç örneğe bakalım!

a = 1
!a # bu, a'nın tersi 0 olacağından FALSE döner.
FALSE
a = 0
!a #yukarıdaki örneğe benzer şekilde TRUE döner; çünkü a = 0 ve a'nın tersi 1'dir.
TRUE

NOT operatörünün, R’nin yerleşik fonksiyonlarıyla çalışırken yardımcı olabileceği bazı durumlara bakalım.

is.numeric(5) #5 sayısal olduğundan TRUE döner
TRUE
!is.numeric(5) #aynısının tersi FALSE döner
FALSE
is.numeric('aditya')
FALSE

Aşağıdaki örnek, sayısal ve metin verilerinin karışımıyla uğraşıp örneğin bir listeden dizgileri/karakterleri ayıklamak ve yalnızca sayısal verileri tutmak istediğiniz durumlarda faydalı olabilir.

!is.numeric('aditya')
TRUE

Son olarak, mantıksal operatörlerin vektörler ve matrisler üzerinde nasıl çalıştığını bulalım.

a <- c(FALSE, TRUE, FALSE)
b <- c(TRUE, TRUE, FALSE)
a & b # AND operatörü
  1. FALSE
  2. TRUE
  3. FALSE
a | b # OR operatörü
  1. TRUE
  2. TRUE
  3. FALSE

Yukarıdaki iki çıktıya göre, ilişkisel operatörlerde vektörlerde olduğu gibi mantıksal operatörler de işlemleri eleman bazında gerçekleştirir.

Ancak NOT operatörü tek seferde yalnızca tek bir vektöre ya da iki vektörün sonucuna uygulanabilir.

!a
  1. TRUE
  2. FALSE
  3. TRUE
!b
  1. FALSE
  2. FALSE
  3. TRUE

Aşağıdaki örnekte NOT operatörü parantezlerin dışındadır; yani a ve b’nin sonucuna uygulanır. Aşağıdaki operatör NOR (Not-OR) operatörü olarak da adlandırılabilir.

!(a | b) # NOR operatörü
  1. FALSE
  2. FALSE
  3. TRUE

Koşullu ifadelere geçmeden önce küçük bir alıştırma yapalım.

Yukarıda tanımladığınız datacamp eğitimi görüntülemelerini yine bir vektör olarak elinizde bulunduruyorsunuz. R’nin tail metodunu kullanarak son elemanı çıkaralım.

last <- tail(datacamp_views,1)
print (last)
[1] 64

Son elemanın 100’ün altında mı yoksa 100’ün üstünde mi olduğunu bulalım.

last < 100 | last > 100
TRUE

Son eleman 100’ün altında olduğundan, ifadelerden biri sağlanır ve bu nedenle TRUE döner.

Bu eğitimin son konusu olan koşullu ifadelere geçelim!

Koşullu İfadeler

Şimdiye kadar, R-Nesnelerinin birbirleriyle nasıl ilişkili olduğunu anlatan ilişkisel operatörleri ve mantıksal değerleri birleştirmenizi sağlayan mantıksal operatörleri öğrendiniz. R, tüm bu operatörleri birleştirip sonucu R betiklerinizin davranışını değiştirmek için kullanmanıza olanak tanır. Bununla birlikte, if ve else ifadelerine geçelim.

if koşulunun sözdizimi aşağıdaki gibidir: if(condition){ // ifade } if ifadesi parantez içinde bir koşul alır; bunu bir ilişkisel ya da mantıksal operatöre bağlayabilirsiniz ve bu koşul TRUE ise, ilgili R kodu (süslü parantezlerin içinde) yürütülür. Basit, değil mi?

Bunu bir örnekle anlayalım.

Diyelim ki x değişkeniniz -10’a eşit; şimdi, x’in sıfırdan büyük olup olmadığını kontrol eden bir koşul koyacak ve bunu NOT operatörüyle olumsuzlayacaksınız. Koşul TRUE olduğundan süslü parantezler içindeki R kodu yürütülecektir.

x <- -10
if (!x > 0){
    print("x is a negative number")
}
[1] "x is a negative number"

Ancak NOT operatörünü kaldırırsanız, koşul FALSE olur ve süslü parantez içindeki kod yürütülmez.

if (x > 0){
    print("x is a positive number")
}

Şimdi else ifadesini bir sözdizimiyle anlayalım. if(condition){ // ifade1 }else{ // ifade2 } if ifadesinin aksine, else ifadesi kendi başına açık bir koşul gerektirmez; if ile birlikte kullanılmalıdır. else ifadesine bağlı R kodu yalnızca if` ifadesinin koşulu TRUE değilse yürütülür.

else ifadesini anlamak için aynı if ifadesi örneğini ele alalım.

x <- -10
if (x > 0){
    print("x is a positive number")
}else{
    print("x is a negative number")
}
[1] "x is a negative number"

Yukarıdaki örnekte, if ifadesi geçerli olmadığından else ifadesi yürütülmüştür.

if ve else ifadesine benzer şekilde, else if ifadesi vardır ve if ile else arasında gelir. if koşulu sağlanmadığında yürütülür. Kısacası, else ifadesi son önceliğe sahiptir. if(condition){ // ifade1 }else if(condition){ // ifade2 }else{ // ifade3 }

x <- 0
if (x > 0){
    print("x is a positive number")
}else if (x == 0){
    print("x is zero")
}else{
    print("x is a negative number")
}
[1] "x is zero"

Ağırlıklı olarak, else if ifadesini, söz konusu koşulların birbirini dışlamadığı, yani aynı anda gerçekleşebileceği durumlarda kullanırız. Bunu bir örnekle görelim.

x <- 12
if (x %% 3 == 0){
    print("x is divisible by 3")
}else if (x %% 4 == 0){
    print("x is divisible by 4")
}else{
    print("x is neither divisible by 3 nor by 4")
}
[1] "x is divisible by 3"

Yukarıdaki örnekte if koşulu TRUE olduğundan R kontrol yapısından çıkar ve bir sonraki ifadelere gitmez; else if koşulu TRUE olarak değerlendirilecek olsa bile yürütülmez. Ancak, else if yerine başka bir if koşulu kullansaydınız, o da yürütülürdü.

Sonuç

Eğitimi tamamladığınız için tebrikler.

Bu eğitim, R programlama dilini öğrenmeye meraklı başlayanlar için iyi bir başlangıç noktasıydı. Güzel bir alıştırma olarak, koşullu ifadelerde koşul olarak ilişkisel ve mantıksal operatörleri uygulamak isteyebilirsiniz.

R’de hâlâ ele alınmayı bekleyen Konular var; R’de Araçlar ve R ile Makine Öğrenimi gibi konular gelecekteki eğitimlerde ele alınacak, bizi takipte kalın!

Lütfen bu eğitimle ilgili sorularınızı aşağıdaki yorumlar bölümünde sormaktan çekinmeyin.

R hakkında daha fazla bilgi edinmek isterseniz DataCamp’in Orta Düzey R kursunu alın.

Konular

İlgili