R'de IF, ELSE, ELSE IF ifadesi

⚡ Akıllı Özet

R'deki if-else ve else-if ifadeleri, mantıksal bir koşula bağlı olarak hangi kod bloğunun çalışacağını seçer. Bu kılavuz, iki dallı yapıyı, çok dallı zincirleri, vektörleştirilmiş if-else() fonksiyonunu ve tam eşleşmeler için switch() fonksiyonunu ele almaktadır.

  • 🔀 Temel Sözdizimi: Eğer (koşul) ise { } aksi halde { } test doğru olduğunda bir dalı, yanlış olduğunda ise diğer dalı çalıştırır.
  • 🔗 Çoklu Şubeler: R, `else if` ifadesini iki ayrı kelime olarak yazar; `elif` anahtar kelimesi yoktur. Python.
  • ⚠️ Sınır Bakımı: Değerlerin dallar arasında istenmeyen bir boşluğa düşmemesi için "büyük veya eşit" ve "küçük veya eşit" operatörlerini kullanın.
  • Vektörleştirilmiş Form: ifelse(test, yes, no) ifadesi, if ifadesinin yapamadığı şekilde, bir vektörün tamamını aynı anda değerlendirir.
  • 🗂️ Tam Eşleşme: switch() fonksiyonu, uzun bir eşitlik testi zincirini tek bir arama işlemiyle değiştirir.
  • 🧮 OperaTor Seçimi: Tek ampersand, öğe bazında çalışırken, çift ampersand ise if ifadesinin içinde tek bir TRUE veya FALSE ifadesi için kullanılır.

R'de If Else Else If Deyimi

R'deki if-else ifadesi

An eğer başka Bu ifade, bir koşul DOĞRU olduğunda bir kod bloğunu, YANLIŞ olduğunda ise başka bir kod bloğunu çalıştırır. R'da sözdizimi şu şekildedir:

if (condition) {
    Expr1 
} else {
    Expr2
}

Aksi takdirde Bildirimi

"Quantity" adlı değişkenin 20'nin üzerinde olup olmadığını kontrol edin. Eğer 20'nin üzerindeyse, kod "Çok sattınız!" yazdırır, aksi takdirde "Bugün için yeterli değil" yazdırır.

# Create vector quantity
quantity <-  25
# Set the if-else statement
if (quantity > 20) {
    print('You sold a lot!')
} else {
    print('Not enough for today')  
}

Çıktı:

## [1] "You sold a lot!"

notGirintileme, R'nin kodu çalıştırma şeklini değiştirmez, ancak tutarlı girintileme, uzun bir koşul zincirinin okunabilirliğini sağlar. Ayrıca, kapanış parantezi ve else anahtar kelimesinin aynı satırda olması gerektiğini unutmayın, aksi takdirde R, if bloğunu tamamlanmış olarak kabul eder ve hata verir.

R'deki else if ifadesi

Zincirleme testler devam ediyor aksi takdirdeR'de elif anahtar kelimesi yoktur, yani PythonR'de bu iki kelimeyi ayrı ayrı yazarsınız ve ihtiyacınız kadar dal ekleyebilirsiniz. Sözdizimi şu şekildedir:

if (condition1) { 
    expr1
    } else if (condition2) {
    expr2
    } else if  (condition3) {
    expr3
    } else {
    expr4
}

Diyelim ki üç sonuç istiyorsunuz: 20'nin altında "Bugün için yeterli değil", 20 ile 30 arasında "Ortalama bir gün" ve 30'un üzerinde "Ne harika bir gün!" yazdıracak.

Miktar miktarını değiştirmeyi deneyebilirsiniz.

# Create the variable quantity
quantity <-  10
# Create multiple condition statement
if (quantity < 20) {
      print('Not enough for today')
} else if (quantity >= 20 & quantity <= 30) {
     print('Average day')
} else {
      print('What a great day!')
}

Çıktı:

## [1] "Not enough for today"

Örnek 2:

KDV oranları ürün kategorisine göre farklılık gösterir. Her birinin kendine özgü bir KDV oranı olan üç kategori düşünün:

Kategoriler Ürünler KDV
A Kitap, dergi, gazete vb. 8%
B Sebze, et, içecek vb. 10%
C Tişört, jean, pantolon vb. 20%

Bir else if zinciri, müşterinin satın aldığı her şeye doğru oranı uygular:

category <- 'A'
price <- 10
if (category =='A'){
  cat('A vat rate of 8% is applied.','The total price is',price *1.08)  
} else if (category =='B'){
    cat('A vat rate of 10% is applied.','The total price is',price *1.10)  
} else {
    cat('A vat rate of 20% is applied.','The total price is',price *1.20)  
}

Çıktı:

## A vat rate of 8% is applied. The total price is 10.8

R'deki ifelse() Vektörleştirilmiş Fonksiyonu

`if` ifadesi yalnızca tek bir değeri ele alır. Ona bir vektör verirseniz, R 4.2 veya sonrası bir hata verir, çünkü koşul tek bir DOĞRU veya YANLIŞ olmalıdır. `ifelse()` fonksiyonu, her öğeyi aynı anda test ederek ve aynı uzunlukta bir vektör döndürerek bu sorunu çözer.

quantities <- c(10, 25, 40, 18)

# if cannot do this
result <- ifelse(quantities > 20, 'You sold a lot!', 'Not enough for today')
result

Çıktı:

## [1] "Not enough for today" "You sold a lot!"      "You sold a lot!"      
## [4] "Not enough for today"

Üç argüman, test, testin DOĞRU olması durumunda döndürülen değer ve testin YANLIŞ olması durumunda döndürülen değerdir. Her üçü de aynı uzunlukta tekrarlanır.

İç içe if() kullanımı, tüm vektör boyunca bir else if zinciri oluşturur:

ifelse(quantities < 20, 'Not enough for today',
    ifelse(quantities <= 30, 'Average day', 'What a great day!'))

Bilinmesi gereken iki sınırlama var. ifelse() fonksiyonu, faktör seviyeleri ve Date sınıfı gibi öznitelikleri sonuçtan çıkarır ve her öğe için her iki dalı da değerlendirir; bu nedenle, bir dal maliyetli olduğunda israf olur. dplyr alternatifi durum_ne zaman() İç içe geçmeyi tamamen önler ve türleri olduğu gibi korur:

library(dplyr)
case_when(
    quantities < 20  ~ 'Not enough for today',
    quantities <= 30 ~ 'Average day',
    TRUE             ~ 'What a great day!'
)

R'deki switch() ifadesi

Her dal aynı değişkeni eşitlik açısından test ettiğinde, uzun bir else if zinciri okunması zor hale gelir. switch() ise bunu tek bir arama ile değiştirir.

category <- 'A'
price <- 10

vat <- switch(category,
    'A' = 1.08,
    'B' = 1.10,
    'C' = 1.20,
    1.20)          # the unnamed last value is the default

cat('The total price is', price * vat)

Davranışını üç kural yönetir:

  • Karakter argümanı kullanıldığında, switch() fonksiyonu adı tam olarak eşleştirir. Kısmi eşleştirme veya desen eşleştirme yoktur.
  • İsimsiz bir son öğe varsayılan değer görevi görür. Böyle bir öğe olmadığında, eşleşmeyen bir değer görünmez bir şekilde NULL döndürür; bu da sık karşılaşılan sessiz hataların bir kaynağıdır.
  • Bir tamsayı argümanı kullanıldığında, switch() işlevi konuma göre seçim yapar: switch(2, “a”, “b”, “c”) “b” değerini döndürür.

Belirli bir değer kümesine karşı tam eşleşmeler için `switch()` yapısını, aralıklar ve bileşik koşullar için ise `else if` yapısını kullanın; çünkü `switch()` bu koşulları ifade edemez. Bir koşulu bir dizi üzerinde tekrar tekrar uygulamak için, onu bir `else if` yapısıyla birleştirin. döngü için ya da döngü sırasında.

mantıksal OperaR koşullarındaki tors

Bir koşulu oluşturan operatörler birbirinden farklı davranırlar ve bu farklılık önemlidir.

Kullanım anlam içinde kullan
& Element bazında VE ifelse(), filter(), tüm vektörler
&& Tek değerli VE, kısa devreler eğer () ve while ()
| Eleman bazında VEYA ifelse(), filter(), tüm vektörler
|| Tek değerli VEYA, kısa devreler eğer () ve while ()
! DEĞİL, testi geçersiz kılar. Herhangi bir yere
%içinde% Bu kümedeki değer bu mu? Uzun VEYA zincirlerinin yerini alır.

Kısa devrelerin önemi. Çift form, cevap kesinleştiği anda durur, bu nedenle sol taraf sonucu zaten belirlemişken sağ taraf asla değerlendirilmez. Bu da bir koruma maddesi yazmayı güvenli hale getirir:

# Safe: length() is checked before x[1] is touched
if (length(x) > 0 && x[1] > 10) print('ok')

Çeşitli değerlerle karşılaştırma. Eşitlik testlerini ardı ardına yapmak yerine, hem daha kısa hem de yanlış yazma olasılığı daha düşük olan %in% ifadesini kullanın:

if (category %in% c('A', 'B')) {
    print('Reduced VAT rate applies')
}

Son bir uyarı: Tek bir eşittir işareti değer atar, karşılaştırma yapmaz. Her zaman == işaretini bir koşulun içine yazın.

R'da Koşullu İfadeler: Hızlı Referans

Bu eğitimde kullanılan her yapı aşağıda listelenmiştir:

Hedef Code
iki dal
if (cond) { a } else { b }
Birden fazla dal
if (c1) { a } else if (c2) { b } else { c }
Vektörleştirilmiş durum
ifelse(test, yes, no)
Vektör üzerinde çok dallı yapı
case_when(c1 ~ a, c2 ~ b, TRUE ~ c)
Tam eşleşme araması
switch(x, "A" = 1, "B" = 2, 0)
Üyelik testi
if (x %in% c("A", "B")) { }

SSS

`if` ifadesi tek bir `TRUE` veya `FALSE` değerini işler ve hangi kod bloğunun çalışacağını kontrol eder. `iElse()` ise vektörleştirilmiş bir fonksiyondur; bir vektörün her öğesini test eder ve sonuçlardan oluşan bir vektör döndürür.

Koşulun tek bir değer olması gerektiği ve kısa devre işleminin sağ tarafı koruduğu if ve while bloklarında çift ifadeyi kullanın. Tüm vektörler üzerinde eleman bazlı testler için tek ifadeyi kullanın.

R 4.2'den beri bir if koşulunun yalnızca bir TRUE veya FALSE değeri içermesi gerekiyor; daha uzun vektörler artık uyarı yerine hata veriyor. Ne demek istediğinize bağlı olarak ifelse(), any() veya all() kullanın.

Koşullar, özellik mühendisliği kurallarını ve erken durdurmayı belirler.ping Eğitim sırasında yapılan kontroller ve model çıktısı üzerindeki eşik kararları. case_when() gibi vektörleştirilmiş formlar, tüm veri kümelerine ölçeklenebildikleri için tercih edilir.

Evet. Yapay zekâ asistanları, her dalda yer alan bir sınır değeri veya karşılaştırma için kullanılan tek bir eşittir işareti gibi boşlukları tespit edebilir. Düzeltilmiş zinciri sınır değerleri üzerinde kendiniz test edin.

Bu yazıyı şu şekilde özetleyin: